Java - 从对象的数组列表中获取最大值?

问题描述:

有没有一种简单的方法可以从对象的数组列表中的对象的一个​​字段中获取最大值?Java - 从对象的数组列表中获取最大值?

例如,出于以下目的,我希望获得Value字段的最高值。

示例arraylist我想从中获取ValuePairs.mValue的最大值。

ArrayList<ValuePairs> 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。

任何帮助表示赞赏。谢谢!

使用ComparatorCollections.max()来让它知道哪个比较大。


请参见

+0

甜耶稣的像这样的东西相比,蟒蛇,C++,C#也只是博格尔斯我的脑海里。 Java确实需要一些语法更新。 –

+0

@Kevin它已经得到了语言语法,用Java 8你可以用lamda做到这一点 –

你应该遍历比较/查找最大值O(N)列表。如果您需要这样做,请经常用PriorityQueueO(1)替换列表以找到最大值。

这已经被多次回答了,但是因为它是google的第一个结果,所以我会给出一个Java 8的例子。

看看stream功能。然后你可以得到这样的对象列表的最大形式:

List<ValuePairs> ourValues = new ArrayList<>(); 

ourValues.stream().max(comparing(ValuePairs::getMValue)).get() 

顺便说一句,在你的例子中,属性应该是私人的。然后你可以用一个吸气器来访问它们。

与Java 8,你可以用它一起使用stream()预定义max()功能和Comparator.comparing()功能与lambda表达式:

ValuePairs maxValue = values.stream().max(Comparator.comparing(v -> v.getMValue())).get();