收集器 toMap() - 从 Map.Entry 到 Map 结构的值映射器
Collectors toMap() - value mapper from Map.Entry to Map structure
我最近偶然发现了以下问题。
基本上我有一组要转换为地图的地图对。下面是代码片段:
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语句(假设相应的功能接口的方法有一个return值)。
如果 lambda 表达式的主体只是一个表达式,则不必用大括号括起来。
我最近偶然发现了以下问题。
基本上我有一组要转换为地图的地图对。下面是代码片段:
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语句(假设相应的功能接口的方法有一个return值)。
如果 lambda 表达式的主体只是一个表达式,则不必用大括号括起来。