Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果其他贴图中的关键点不存在,如何向贴图添加元素_Java_Java Stream - Fatal编程技术网

Java 如果其他贴图中的关键点不存在,如何向贴图添加元素

Java 如果其他贴图中的关键点不存在,如何向贴图添加元素,java,java-stream,Java,Java Stream,我有一个流,它获取一个对象列表,并通过按ID对它们进行分组并计算每个元素的重复次数来创建一个映射。 但是,在关闭流并返回映射之前,我需要检查来自另一个映射(我已经拥有)的所有ID(键)是否存在于新映射中,如果不存在,我必须使用默认值0添加它们。 在同一个流中执行这样的操作是很重要的,因为我正在努力学习,并且非常希望使代码尽可能紧凑和可读 下面是代码的第一部分,我现在需要检查其他映射中的哪些ID不存在于新创建的映射中,并使用值0添加它们 return bookings.stream()

我有一个流,它获取一个对象列表,并通过按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;
Map res=bookings.stream()
.collect(Collectors.groupingBy(a->a.getID(),Collectors.counting());
map2.keySet().stream().forEach(r->res.putIfAbsent(r,0L));
返回res;

有很多方法可以做到这一点,但“使代码尽可能紧凑和可读”几乎是不可能的。您可能希望了解的一个解决方案是
收集器。CollectionAndThen()
。使用此收集器,您可以向给定收集器添加一个修整器。因此,您可以对finisher中的所有键运行
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;
                }));
Map result=bookings.stream()
收集,收集收集,然后收集(
Collectors.groupingBy(Booking::getCampoID,Collectors.counting()),
地图->{
map2.keySet().forEach(k->map.putIfAbsent(k,0L));
返回图;
}));
但实际上,您已经拥有的代码对我来说也是非常紧凑和可读的