Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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 使用Collector.toMap在地图中收集_Java_Collections_Java Stream - Fatal编程技术网

Java 使用Collector.toMap在地图中收集

Java 使用Collector.toMap在地图中收集,java,collections,java-stream,Java,Collections,Java Stream,我无法解决一个简单的问题。 我有一张X类型的地图,它需要转换成Y类型的地图 mapOfTypeX.entrySet().stream().map(e-> transform(e)).collect(Collector.toMap(....)); transform函数获取条目集并返回类型为Y的映射,例如Map 公共映射转换(Map.Entry){ 我不确定传递给Collector.ToMap函数的内容。现有代码是命令式代码,它将类型Y的映射传递给transform函数并执行映射。put

我无法解决一个简单的问题。 我有一张X类型的地图,它需要转换成Y类型的地图

mapOfTypeX.entrySet().stream().map(e-> transform(e)).collect(Collector.toMap(....));
transform函数获取条目集并返回类型为Y的映射,例如
Map

公共映射转换(Map.Entry){

我不确定传递给Collector.ToMap函数的内容。现有代码是命令式代码,它将类型Y的映射传递给transform函数并执行
映射。putall
基本上,您需要使用函数而不是使用
toMap
包装器

mapOfTypeX.entrySet().stream()
          .map(e-> transform(e))
          .collect(HashMap::new, HashMap::putAll, HashMap::putAll);

基本上,您需要使用函数,而不是使用
toMap
wrapper

mapOfTypeX.entrySet().stream()
          .map(e-> transform(e))
          .collect(HashMap::new, HashMap::putAll, HashMap::putAll);
您可以使用流并将从transform方法接收的所有映射中的所有条目组合为:

Map<key,SomeClassObjectAsValue> newMap = 
    mapOfTypeX.entrySet()
        .stream()
        .flatMap(e -> transform(e).entrySet().stream())
        .collect(Collectors
            .toMap(Map.Entry::getKey, Map.Entry::getValue,(oldValue, newValue) -> oldValue));
Map newMap=
mapOfTypeX.entrySet()
.stream()
.flatMap(e->transform(e).entrySet().stream())
.收藏(收藏家)
.toMap(Map.Entry::getKey,Map.Entry::getValue,(oldValue,newValue)->oldValue));
您可以使用streams并将从transform方法接收的所有映射中的所有条目组合为:

Map<key,SomeClassObjectAsValue> newMap = 
    mapOfTypeX.entrySet()
        .stream()
        .flatMap(e -> transform(e).entrySet().stream())
        .collect(Collectors
            .toMap(Map.Entry::getKey, Map.Entry::getValue,(oldValue, newValue) -> oldValue));
Map newMap=
mapOfTypeX.entrySet()
.stream()
.flatMap(e->transform(e).entrySet().stream())
.收藏(收藏家)
.toMap(Map.Entry::getKey,Map.Entry::getValue,(oldValue,newValue)->oldValue));

为什么不只执行
putAll
?这种方法有什么不对。putAll返回void,所以本质上这是一种副作用,我不希望这样。同样在将来,我想从一个流转移到一个并行流,然后我觉得像这样的副作用会导致问题。因此,我想首先转换映射,然后在目标映射中收集结果。关于为什么要将
映射转换为
映射的问题,还不是很清楚。输入
映射
,您当前的命令式写作风格是什么?在
映射
的返回类型中,什么是
?什么是
SomeClassObjectAsValue
?键是类SomeClassObjectAsValue的实例成员,该成员本身是一个具有两个成员的类,一个是字符串,另一个是日期。SomeClassObjectAsValue{Key k;}Key{String prop1;LocalDate prop2——实现的哈希代码和等于方法}为什么不只执行
putAll
?这种方法有什么不对。putAll返回void,所以本质上这是一种副作用,我不希望这样。同样在将来,我想从一个流转移到一个并行流,然后我觉得像这样的副作用会导致问题。因此,我想首先转换映射,然后在目标映射中收集结果。关于为什么要将
映射转换为
映射的问题,还不是很清楚。输入
映射
,您当前的命令式写作风格是什么?在
映射
的返回类型中,什么是
?什么是
SomeClassObjectAsValue
?键是类SomeClassObjectAsValue的实例成员,该成员本身是一个具有两个成员的类,一个是字符串,另一个是日期。SomeClassObjectAsValue{Key k;}Key{String prop1;LocalDate prop2——实现的哈希代码和等于方法}