我有大量记录对象的列表,我只需要基于第一个对象字段值(list.get(0).getId()
)的前n个条目
我这样做:
List<Event> list = asList(
new Event("id_1", "value_1" ...),
new Event("id_1", "value_2" ...),
new Event("id_1", "value_3" ...),
new Event("id_2", "value_4" ...),
new Event("id_2", "value_5" ...),
new Event("id_2", "value_6" ...));
String id = events.get(0).getId();
return list.stream()
.filter(event -> event.getId().equals(id))
.collect(toList());
它可以工作,但是看起来不是真的。您能给我建议如何做得更好吗?
答案 0 :(得分:0)
如果要避免对列表的初始访问(以获取第一个事件的ID),则可以按ID对事件进行分组,然后返回第一组事件:
return list.stream()
.collect(Collectors.groupingBy(Event::getId,
LinkedHashMap::new,
Collectors.toList()))
.values()
.iterator()
.next();
P.S。如果列表可以为空,则仍然需要检查.values().iterator().hasNext()
。