Java 收集器toMap()-从Map.Entry到Map结构的值映射器
我最近偶然发现了以下问题 基本上我有一组对,我想把它们转换成一张地图。下面是代码片段:Java 收集器toMap()-从Map.Entry到Map结构的值映射器,java,java-11,collectors,Java,Java 11,Collectors,我最近偶然发现了以下问题 基本上我有一组对,我想把它们转换成一张地图。下面是代码片段: Set<Map.Entry<String,String> > testSet = new HashSet<>( Arrays.asList( entry("key1","value1"), entry("key1","value1")
Set<Map.Entry<String,String> > testSet = new HashSet<>(
Arrays.asList(
entry("key1","value1"),
entry("key1","value1")
)
);
Map<String,Map<String,String>> testMap = testSet
.stream()
.collect(
Collectors.toMap(
entry -> entry.getKey(),
entry-> {
Map.ofEntries(
entry(entry.getKey(),entry.getValue() + "2")
);
}
)
);
Set testSet=new HashSet(
Arrays.asList(
条目(“键1”、“值1”),
输入(“键1”、“值1”)
)
);
Map testMap=testSet
.stream()
.收集(
汤姆(
entry->entry.getKey(),
条目->{
入口地图(
条目(entry.getKey(),entry.getValue()+“2”)
);
}
)
);
上面的代码段没有编译,因为传递给toMap的函数需要对象而不是Map.Entry对象,因此编译器找不到特定于Map.Entry的方法
我不知道为什么会发生这种情况,因此非常感谢您的帮助。应该是:
Map<String,Map<String,String>> testMap = testSet
.stream()
.collect(
Collectors.toMap(
entry -> entry.getKey(),
entry -> Map.ofEntries(entry(entry.getKey(),entry.getValue() + "2"))
)
);
Map testMap=testSet
.stream()
.收集(
汤姆(
entry->entry.getKey(),
entry->Map.ofEntries(entry(entry.getKey(),entry.getValue()+“2”))
)
);
使用带有大括号的lambda表达式体时,它必须包含一个return语句(假设相应函数接口的方法具有返回值)
如果lambda表达式的主体只是一个表达式,则不必用大括号括起来。在值映射中删除大括号
{}
可能重复,但作为旁注,Map.ofEntries(Map.entry(a,b))
是Map.of(a,b)
的详细版本。