java - 如何使用 Java Stream 运算符获取子值的子值并收集为 map

标签 java list collections java-8 java-stream

我有以下类(class)。

Class Person {
    String value1;
    List<KeyValue> keyValue;
}
Class KeyValue{
    String key;
    String value;
}

我想要输出 map 为 Map<String, String>其中第一个字符串值 - Key 是 keyValue.getValue() ,它始终是唯一的,第二个字符串值 - value 是 value1

我可以简单地迭代并执行性能,但是有什么方法可以使用 Stream 运算符来执行此操作并使代码可读格式。

最佳答案

对于给定 Person 的每个 KeyValue,创建一个 map 条目。然后使用 flatMap 运算符将所有这些流展平为一个大流。最后,使用 toMap 收集器将其收集到 map 中。鉴于 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));

关于java - 如何使用 Java Stream 运算符获取子值的子值并收集为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59450595/

相关文章:

Backbone.js reset() 会破坏模型吗?

java - 如何通过属性查找ArrayList中的对象

java - 仅针对 PDF 打印中的首页设置方向 - java

java - 如何连接到时间服务器以获取当前时间设置?也有任何时间服务器吗?

java正则表达式搜索和替换模块

jquery - 带有 jquery 进度条的 css 树文件夹列表

python - 将类别列表打印为一列

java - Resteasy 在没有 web.xml 的情况下配置 JacksonJaxbJsonProvider 提供者

python - 仅反转列表中的整数,无需切片或反向()

c# - WPF:实现和绑定(bind)(数据网格)到自定义集合