java - Collectors toMap() - 从 Map.Entry 到 Map 结构的值映射器
问题描述
我最近偶然发现了以下问题。
基本上我有一组我想转换为 maps 的对。下面是代码片段:
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 语句(假设相应的函数式接口的方法有一个返回值)。
如果 lambda 表达式的主体只是单个表达式,则不必将其包裹在大括号中。
推荐阅读
- go - gometalinter 正在检查 /usr/local/go 文件
- go - 迁移具有多个主机 ip 的 cassandra 库实现
- php - PDO 方法 rowCount() 是否可以为插入过程返回 int 0 而不会像在更新过程中那样被捕获?
- reactjs - 意外的令牌:Webpack、reactjs 和 babel
- sql - SQL 从 XML 中提取值
- html - 长文本导致 div 高度问题
- android - Android ndk r15c 编译 node.js 错误:“to_string”不是“std”的成员
- java - MainActivity 无法转换接口
- sql-server - 使用 DATEDIFF 获取最近六个月的结果
- javascript - 有没有办法在窗口加载事件中停止加载某些资源以提高站点性能?