Java - 从对象的arraylist获取最大值?

时间:2013-10-12 20:07:45

标签: java

是否有一种简单的方法可以从对象的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。

感谢任何帮助。谢谢!

5 个答案:

答案 0 :(得分:12)

ComparatorCollections.max()一起使用,让它知道哪个比较好。


另见

答案 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;
    }