有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java8中,通过流将具有list的list对象转换为map

我有以下课程:

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)
   }
}  

在一行流方法中实现这一点的最佳方法是什么

谢谢 埃拉德


共 (1) 个答案

  1. # 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));