我最近偶然发现了以下问题。
基本上,我有一组我想将其转换为 map 的 map 。下面是代码片段:
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")
);
}
)
);
上面的代码片段无法编译,因为传递给 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"))
)
);
当您使用带有大括号的 lambda 表达式主体时,它必须包含 return 语句(假设相应的功能接口(interface)的方法有返回值)。
如果 lambda 表达式的主体只是单个表达式,则不必将其括在大括号中。
关于java - Collectors toMap() - 从 Map.Entry 到 Map 结构的值映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953539/