【发布时间】:2018-10-10 13:35:14
【问题描述】:
我想使用 Stream 和 Lambda 组合构建地图。
我尝试了很多方法,但我被卡住了。这是使用 Stream/Lambda 和经典循环的经典 Java 代码。
Map<Entity, List<Funder>> initMap = new HashMap<>();
List<Entity> entities = pprsToBeApproved.stream()
.map(fr -> fr.getBuyerIdentification().getBuyer().getEntity())
.distinct()
.collect(Collectors.toList());
for(Entity entity : entities) {
List<Funder> funders = pprsToBeApproved.stream()
.filter(fr -> fr.getBuyerIdentification().getBuyer().getEntity().equals(entity))
.map(fr -> fr.getDocuments().get(0).getFunder())
.distinct()
.collect(Collectors.toList());
initMap.put(entity, funders);
}
如您所见,我只知道如何在列表中收集,但我不能用地图做同样的事情。这就是为什么我必须再次流式传输我的列表以构建第二个列表,最后将所有内容放在一张地图中。 我也尝试过 'collect.groupingBy' 语句,因为它也应该生成地图,但我失败了。
【问题讨论】:
-
您只想在一个流中构建地图...无法真正理解您。第一步是使用
entities.forEach(entity-> ..... );
标签: java lambda java-8 hashmap java-stream