Java 使用Collector.toMap在地图中收集
我无法解决一个简单的问题。 我有一张X类型的地图,它需要转换成Y类型的地图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
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——实现的哈希代码和等于方法}