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

时间:2017-09-06 21:49:38

标签: java java-8 java-stream

我有一个像

这样的清单
List<Event>

其中Event具有eventId,eventName,groupId等属性。可以有多个属于同一组的事件。我想要一张像

这样的地图
Map<Long, Event>

其中key是groupId,Event是具有max eventId的那个。所以,基本上我只想对属于同一组的事件列表进行排序,然后找出具有可用作值的最大事件Id的事件。我不确定如何实现这一目标。请协助。

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

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

Map<Long, Event> result = events.stream().collect( 
Collectors.toMap( (e) -> e.getGroupid() , (e) -> e, 
(e1, e2) -> e1.getEventId().compareTo( e2.getEventId() ) > 0 ? e1 : e2 ) );