我有一个流,它接受一个对象列表,并通过按 ID 对它们进行分组并计算每个元素的重复次数来创建一个映射。但是,在关闭流并返回地图之前,我需要检查另一张地图(我已经拥有)中的所有 ID(键)是否都存在于新地图中,如果没有,我必须使用默认值 0 添加它们。在同一流中执行此类操作很重要,因为我正在努力学习并且真的希望使代码尽可能紧凑和可读。以下是代码的第一部分,我现在需要检查其他地图中的哪些 ID 不存在于新创建的地图中,并将它们的值添加为 0。return bookings.stream() .collect(Collectors.groupingBy(a -> a.getID(), Collectors.counting()));编辑:澄清一下,这是我需要做的,但我想在原始流中执行以下所有操作。Map<Integer,Long> res = bookings.stream() .collect(Collectors.groupingBy(a -> a.getID(), Collectors.counting()));map2.keySet().stream().forEach(r -> res.putIfAbsent(r,0L));return res;
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
有很多方法可以做到这一点,但“让代码尽可能紧凑和可读”几乎是不可能的。您可能想要查看的一种解决方案是Collectors.collectingAndThen()
. 使用此收集器,您可以将整理器添加到给定的收集器。这样您就可以运行Map.putIfAbsent()
整理器中的所有键:
Map<Integer, Long> result = bookings.stream() .collect(Collectors.collectingAndThen( Collectors.groupingBy(Booking::getCampoID, Collectors.counting()), map -> { map2.keySet().forEach(k -> map.putIfAbsent(k, 0L)); return map; }));
但实际上你已经拥有的代码对我来说看起来也非常紧凑和可读。
添加回答
举报
0/150
提交
取消