Java – 从对象的arraylist获取最大值?
有没有一种简单的方法可以从对象的arraylist中的对象的一个字段中获取最大值?
例如,在以下对象中,我希望获得Value字段的最高值。
示例arraylist我想从中获取ValuePairs.mValue的最大值。
ArrayList ourValues = new ArrayList(); outValues.add(new ValuePairs("descr1", 20.00)); outValues.add(new ValuePairs("descr2", 40.00)); outValues.add(new ValuePairs("descr3", 50.00));
用于创建存储在arraylist中的对象的类:
public class ValuePairs { public String mDescr; public double mValue; public ValuePairs(String strDescr, double dValue) { this.mDescr = strDescr; this.mValue = dValue; } }
我试图通过做类似的事情来获取mValue的最大值(我知道这是不正确的):
double dMax = Collections.max(ourValues.dValue);
dMax应为50.00。
任何帮助表示赞赏。 谢谢!
使用带有Collections.max()
的Comparator
让它知道哪个比较大。
另见
- 如何使用自定义
Comparator
这已经被多次回答,但由于这是谷歌的第一个结果,我将给出一个Java 8答案的例子。
看看流function。 然后你可以得到最大格式的对象列表,如下所示:
List ourValues = new ArrayList<>(); ourValues.stream().max(comparing(ValuePairs::getMValue)).get()
顺便提一下,在您的示例中,属性应该是私有的。 然后,您可以使用getter访问它们。
您应该遍历列表,比较/找到最大值O(N)
。 如果您需要这样做,通常用PriorityQueue O(1)
替换列表以找到最大值。
使用Java 8,您可以将stream()
与预定义的max()
函数以及带有lambda表达式的Comparator.comparing()
function一起使用:
ValuePairs maxValue = values.stream().max(Comparator.comparing(v -> v.getMValue())).get();