【问题标题】:How to take child of child value and collect as a map with Java Stream operator如何使用 Java Stream 运算符获取子值的子元素并作为地图收集
【发布时间】:2020-04-14 11:07:22
【问题描述】:

我有以下课程。

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

我希望输出映射为Map&lt;String, String&gt;,其中第一个字符串值 - Key 是 keyValue.getValue(),它将始终是唯一的,第二个字符串值 - value 是 value1 .

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

【问题讨论】:

    标签: java list collections java-8 java-stream


    【解决方案1】:

    对于给定Person 的每个KeyValue,创建一个映射条目。然后使用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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2021-01-30
      相关资源
      最近更新 更多