Is there an easy way to get the max value from one field of an object in an arraylist of objects?
For example, out of the following object, I was hoping to get the h
With Java 8 you can use stream()
together with it's predefined max()
function and Comparator.comparing()
functionality with lambda expression:
ValuePairs maxValue = values.stream().max(Comparator.comparing(v -> v.getMValue())).get();
Here fist and last is intervals between two indexes of arraylist you can also get for a complete list by removing them and i=0 upto size of float list.
// for min value
public String getMinValue(ArrayList list, int first, int last) {
List<Float> floatList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Float prova2 = ((Double) list.get(i)).floatValue();
floatList.add(prova2);
}
float min = Float.MAX_VALUE;
String minValue = "";
for (int i = first; i < last; i++) {
if (floatList.get(i) < min) {
min = floatList.get(i);
}
}
minValue = String.format("%.1f", min);
return minValue;
}
// for max value
public String getMaxValue(List<Object> list, int first, int last) {
List<Float> floatList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Float prova2 = ((Double) list.get(i)).floatValue();
floatList.add(prova2);
}
float max = Float.MIN_VALUE;
String maxValue = "";
for (int i = first; i < last; i++) {
if (floatList.get(i) > max) {
max = floatList.get(i);
}
}
maxValue = String.format("%.1f", max);
return maxValue;
}
You should iterate over the list comparing/finding the max value O(N)
. If you need to do this often replace the list with a PriorityQueue O(1)
to find the max.
This has been answered multiple time already, but since it's the first result on google I will give a Java 8 answer with an example.
Take a look at the stream feature. Then you can get the max form an List of Objects like this:
List<ValuePairs> ourValues = new ArrayList<>();
ourValues.stream().max(comparing(ValuePairs::getMValue)).get()
By the way in your example, the attributes should be private. You can then access them with a getter.
Use a Comparator
with Collections.max() to let it know which is greater in comparison.
Also See