我想使用Stream&Lambda对构建地图。
我已经尝试了很多方法,但是我陷入了困境。这是使用Stream / Lambda和经典循环实现的经典Java代码。
val n: Int = 10
val arr = Array(n, { it } )
val i: Int = 0
println(arr[i])
如您所见,我只知道如何在列表中进行收集,但是我无法对地图进行相同的处理。这就是为什么我必须再次流式传输列表以构建第二个列表,以便最终将所有列表放到地图中的原因。 我也尝试过'collect.groupingBy'语句,因为它也应该生成地图,但是我失败了。
答案 0 :(得分:6)
似乎您想将pprsToBeApproved
列表上的内容映射到您的Funder
实例,并按照买方Entity
对其进行分组。
您可以执行以下操作:
Map<Entity, List<Funder>> initMap = pprsToBeApproved.stream()
.collect(Collectors.groupingBy(
fr -> fr.getBuyerIdentification().getBuyer().getEntity(), // group by this
Collectors.mapping(
fr -> fr.getDocuments().get(0).getFunder(), // mapping each element to this
Collectors.toList()))); // and putting them in a list
如果您不想为特定实体提供重复的资助者,则可以将其收集到集合图中:
Map<Entity, Set<Funder>> initMap = pprsToBeApproved.stream()
.collect(Collectors.groupingBy(
fr -> fr.getBuyerIdentification().getBuyer().getEntity(),
Collectors.mapping(
fr -> fr.getDocuments().get(0).getFunder(),
Collectors.toSet())));
这与Collectors.groupingBy
一起使用Collectors.mapping
。