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

use*_*963 8 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));
Run Code Online (Sandbox Code Playgroud)

用于创建存储在arraylist中的对象的类:

public class ValuePairs {

    public String mDescr;
    public double mValue;

    public ValuePairs(String strDescr, double dValue) {

        this.mDescr = strDescr;
        this.mValue = dValue;

    }

}
Run Code Online (Sandbox Code Playgroud)

我试图通过做类似的事情来获取mValue的最大值(我知道这是不正确的):

double dMax = Collections.max(ourValues.dValue);
Run Code Online (Sandbox Code Playgroud)

dMax应为50.00.

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

Jig*_*shi 13

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


另见


Pau*_*nel 5

这已经被多次回答,但由于这是谷歌的第一个结果,我将以一个例子给出Java 8答案.

看看功能.然后你可以得到最大格式的对象列表,如下所示:

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

ourValues.stream().max(comparing(ValuePairs::getMValue)).get()
Run Code Online (Sandbox Code Playgroud)

顺便提一下,在您的示例中,属性应该是私有的.然后,您可以使用getter访问它们.


M. *_*ena 5

借助Java 8,您可以将其stream()与预定义的max()功能和Comparator.comparing()带lambda表达式的功能一起使用:

ValuePairs maxValue = values.stream().max(Comparator.comparing(v -> v.getMValue())).get();
Run Code Online (Sandbox Code Playgroud)