首页 > 解决方案 > 如何从对象列表中获取指定字段值最大的元素

问题描述

如何从对象列表中获取指定字段值最大的元素?

public class MyObj {
    private String name;
    private int value;
    // getter & setter
}

List<MyObj> list = Arrays.asList(
        new MyObj("a", 1),
        new MyObj("b", 1),
        new MyObj("c", 2),
        new MyObj("d", 2),
        new MyObj("e", 3),
        new MyObj("f", 3)
);
// how to get the objs which value is max, here is MyObj("e", 3) and MyObj("f", 3)
List<MyObj> maxList = //todo ;

注意:不要取最大值

标签: javajava-8java-stream

解决方案


这将完成这项工作。它首先根据该值获取最大值并根据该值过滤列表。

int maxValue = list.stream()
        .mapToInt(MyObj::getValue)
        .max().orElse(Integer.MIN_VALUE);

List<MyObj> maxList = list.stream()
        .filter(obj -> obj.getValue() == maxValue)
        .collect(Collectors.toList());

推荐阅读