在Java8中使用lambda排序和创建映射

在Java8中使用lambda排序和创建映射,java,java-8,java-stream,Java,Java 8,Java Stream,我有一张这样的清单 List<Event> 其中事件具有eventId、eventName、groupId等属性。可以有多个属于同一组的事件。我想要一张像这样的地图 Map<Long, Event> 其中key是groupId,Event是具有max eventId的。所以,基本上我只想对属于同一组的事件列表进行排序,然后找出一个具有最大事件Id的事件,它可以用作一个值。我不知道如何才能做到这一点。请帮忙 我想在单行代码中使用lambda实现这一点。您可以尝试以下方法

我有一张这样的清单

List<Event>
其中事件具有eventId、eventName、groupId等属性。可以有多个属于同一组的事件。我想要一张像这样的地图

Map<Long, Event>
其中key是groupId,Event是具有max eventId的。所以,基本上我只想对属于同一组的事件列表进行排序,然后找出一个具有最大事件Id的事件,它可以用作一个值。我不知道如何才能做到这一点。请帮忙


我想在单行代码中使用lambda实现这一点。

您可以尝试以下方法:

Map<Long, Event> result = events.stream().collect( 
Collectors.toMap( (e) -> e.getGroupid() , (e) -> e, 
(e1, e2) -> e1.getEventId().compareTo( e2.getEventId() ) > 0 ? e1 : e2 ) );
我想在单行代码中使用lambda实现这一点。为什么?当最终结果是具有最高evenId的事件时,为什么需要基于groupId对事件进行分组?如果是,请查询列表,如果不是,请详细说明…或者您想要每个组的最大事件数?您认为您的意思是>0或替换e1,e2->e1.getEventId.compareTo e2.getEventId>0?e1:e2和BinaryOperator.maxByComparator.comparingLongEvent::getEventId使用静态导入看起来更好…