【问题标题】:Convert List<List<Object>> to Map<Object,List<Object>> Java8将 List<List<Object>> 转换为 Map<Object,List<Object>> Java8
【发布时间】:2021-01-22 13:46:43
【问题描述】:

我有一个对象

class Wrapper{ 
   private SomeObject someObject;
   private String value;
}

class SomeObject{
  private String id;
}

我有返回 List&lt;List&lt;Wrapper&gt;&gt; 的函数我想将其转换为 Map&lt;SomeObject,List&lt;Wrapper&gt;&gt;

目前我正在使用循环和比较来实现这一点。有没有办法通过 Java8 流来实现这一点

wrappers.stream()
            .flatMap(w -> w.stream()) //stream of wrapper
            .collect(Collectors.toMap(<not sure which mapping fucntion to use here>))

【问题讨论】:

    标签: collections java-8 java-stream


    【解决方案1】:

    您可以使用groupingBy 收集器和flatMap 运算符来完成此操作。这是它的外观。

    Map<SomeObject, List<Wrapper>> map = l.stream().flatMap(List::stream)
        .collect(Collectors.groupingBy(Wrapper::getSomeObject));
    

    但是,迭代版本比流更易读且速度更快。

    Map<SomeObject, List<Wrapper>> m = new HashMap<>();
    for (List<Wrapper> wrappers : l)
        for (Wrapper w : wrappers)
            m.computeIfAbsent(w.someObject, unused -> new ArrayList<Wrapper>()).add(w);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多