在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使用静态导入看起来更好…