【问题标题】:convert a list objects with list to map in Java 8 by stream [duplicate]通过流将带有列表的列表对象转换为Java 8中的映射[重复]
【发布时间】:2020-10-04 03:13:58
【问题描述】:

我有以下课程:

class A {
   String id;
   List<B> b;
}

class B {
   String id;
}

我有一个 a 的列表,我想使用以下逻辑将其转换为地图:

List<A> aList;

Map<String, String> map; 

for (A a:aList)
{
   for (B b:aList.b)
   {
      map.put(b.id, a.id)
   }
}  

在一行流方法中最好的方法是什么?

谢谢 埃拉德

【问题讨论】:

    标签: java java-stream


    【解决方案1】:

    您可以从A 类对象流式传输B 类的每个列表,然后将id 组合收集到Map.Entry 对象中

    Map<String,String> map = aList.stream()
                                  .flatMap(al->al.getB()
                                                 .stream()
                                                 .map(bl-new AbstractMap.SimpleEntry<String, String>(bl.getId(), al.getId())))
                                  .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
    

    【讨论】:

    • 感谢@Deadpool!实际上你可以使用 Map.entry 而不是 new AbstractMap.SimpleEntry
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多