java - 如何使用 Java Stream 运算符获取子值的子值并作为地图收集
问题描述
我有以下课程。
Class Person {
String value1;
List<KeyValue> keyValue;
}
Class KeyValue{
String key;
String value;
}
我希望输出映射为Map<String, String>
第一个字符串值 -键是 keyValue.getValue(),它将始终是唯一的,第二个字符串值 -值是 value1。
我可以简单地迭代并执行性能,但是有什么方法可以使用 Stream 运算符来执行此操作并使代码可读格式。
解决方案
对于KeyValue
给定的每个Person
,创建一个映射条目。然后使用flatMap
运算符将所有这些流扁平化为一个大流。最后,使用收集器将其收集到地图中toMap
。鉴于返回的值KeyValue.getValue
始终是唯一的(根据您的问题陈述),可能不会发生键冲突。这是它的外观。
Map<String, String> keyToPersonMap = people.stream()
.flatMap(p -> p.getKeyValue().stream()
.map(kv -> new AbstractMap.SimpleEntry<>(kv.getValue(), p.getValue1())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
推荐阅读
- mysql - 在 Codeigniter 中加入 4 个具有公共字段的表
- c# - 硒识别击键并停止
- c++ - 具有动态内存分配的 C++ constexpr 函数
- python - 从字符串序列创建 Python lambda 函数
- macos - 如何在 Mac 上运行 install.py 以在 MATLAB 中安装 MOSEK?
- linux - minion 需要交互式身份验证
- reactjs - 使用 Styled Components 和 Polish 如何包含一个函数作为颜色?
- reactjs - Meteor + React - 访问文档时加载 vs 404
- python-3.x - 如何在 Python 3 中循环创建单独的 PD 数据帧
- javascript - Javascript客户端从服务器获取响应