为了账号安全,请及时绑定邮箱和手机立即绑定

如果不存在来自另一个地图的键,如何将元素添加到地图

如果不存在来自另一个地图的键,如何将元素添加到地图

慕勒3428872 2023-03-09 15:06:38
我有一个流,它接受一个对象列表,并通过按 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;
                }));

但实际上你已经拥有的代码对我来说看起来也非常紧凑和可读。


查看完整回答
反对 回复 2023-03-09
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信