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。
任何帮助表示赞赏。谢谢!
答
这已经被多次回答了,但是因为它是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();
甜耶稣的像这样的东西相比,蟒蛇,C++,C#也只是博格尔斯我的脑海里。 Java确实需要一些语法更新。 –
@Kevin它已经得到了语言语法,用Java 8你可以用lamda做到这一点 –