是否有一种简单的方法可以从对象的arraylist中的对象的一个字段中获取最大值?
例如,在以下对象中,我希望获得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。
感谢任何帮助。谢谢!
答案 0 :(得分:12)
答案 1 :(得分:5)
这已经被多次回答,但由于它是谷歌的第一个结果,我将以Java 8答案为例。
查看stream功能。然后你可以得到最大格式的对象列表,如下所示:
List<ValuePairs> ourValues = new ArrayList<>();
ourValues.stream().max(comparing(ValuePairs::getMValue)).get()
顺便提一下,在您的示例中,属性应该是私有的。然后,您可以使用getter访问它们。
答案 2 :(得分:3)
使用Java 8,您可以将stream()
及其预定义的max()
函数和Comparator.comparing()
功能与lambda表达式一起使用:
ValuePairs maxValue = values.stream().max(Comparator.comparing(v -> v.getMValue())).get();
答案 3 :(得分:1)
您应该遍历列表,比较/找到最大值O(N)
。如果您需要这样做,请经常使用PriorityQueue O(1)
替换列表以查找最大值。
答案 4 :(得分:0)
第一个和最后一个是arraylist的两个索引之间的间隔,您也可以通过删除它们来获得完整列表,并且i = 0直到浮动列表的大小。 < / p>
//表示最小值
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;
}
//表示最大值
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;
}