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();