Java 8 Streams减少了删除重复项,保留了最新的条目

Nes*_*aev 4 java collections reduction java-8 java-stream

我有一个Java bean,就像

class EmployeeContract {
    Long id;
    Date date;
    getter/setter
}
Run Code Online (Sandbox Code Playgroud)

如果有一个很长的列表,我们在id中有重复但有不同的日期,例如:

1, 2015/07/07
1, 2018/07/08
2, 2015/07/08
2, 2018/07/09
Run Code Online (Sandbox Code Playgroud)

如何减少此类列表仅保留最近日期的条目,例如:

1, 2018/07/08
2, 2018/07/09
Run Code Online (Sandbox Code Playgroud)

?最好使用Java 8 ...

我从一开始就开始:

contract.stream()
         .collect(Collectors.groupingBy(EmployeeContract::getId, Collectors.mapping(EmployeeContract::getId, Collectors.toList())))
                    .entrySet().stream().findFirst();
Run Code Online (Sandbox Code Playgroud)

这给了我各个组内的映射,但是我被困在如何将其收集到结果列表中 - 我的流不是太强我害怕...

Eug*_*ene 7

好吧,我只想以答案的形式将我的评论放在这里:

 yourList.stream()
         .collect(Collectors.toMap(
                  EmployeeContract::getId,
                  Function.identity(),
                  BinaryOperator.maxBy(Comparator.comparing(EmployeeContract::getDate)))
            )
         .values();
Run Code Online (Sandbox Code Playgroud)

如果你真的关心这个,这将给你一个Collection而不是一个List.