Java 将收集器maxBy与groupingBy一起使用时,展开是可选的

Java 将收集器maxBy与groupingBy一起使用时,展开是可选的,java,java-stream,Java,Java Stream,我有一个带有字符串和int字段的类 public class Data { private String name; private int value; private Data(String name, int value) { this.name = name; this.value = value; } public String getName() { return name; }

我有一个带有
字符串
int
字段的类

public class Data {
    private String name;
    private int value;

    private Data(String name, int value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public int getValue() {
        return value;
    }
}
我有一个
列表
,如果我想创建一个映射(分组)来了解每个名称具有最大值的数据对象,我可以这样做

Map<String, Optional<Data>> result = list.stream()
            .collect(Collectors.groupingBy(Data::getName,
                    Collectors.maxBy(Comparator.comparing(Data::getValue))));

使用streams是否有一种惯用的方法来实现这一点?

您可以使用
BinaryOperator.maxBy
收集器.toMap

Map<String, Data> result = list.stream()
        .collect(Collectors.toMap(Data::getName, Function.identity(),
            BinaryOperator.maxBy(Comparator.comparing(Data::getValue))));
Map result=list.stream()
.collect(Collectors.toMap(Data::getName,Function.identity(),
maxBy(Comparator.comparing(Data::getValue));

很简单。。“我只是错过了。”尼古拉斯,我想是的。你看到问题了吗?
Map<String, Data> result = list.stream()
        .collect(Collectors.toMap(Data::getName, Function.identity(),
            BinaryOperator.maxBy(Comparator.comparing(Data::getValue))));