通过流将带有列表的列表对象转换为Java 8中的映射[重复]

Posted

技术标签:

【中文标题】通过流将带有列表的列表对象转换为Java 8中的映射[重复]【英文标题】:convert a list objects with list to map in Java 8 by stream [duplicate] 【发布时间】: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)
   
  

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

谢谢 埃拉德

【问题讨论】:

【参考方案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

以上是关于通过流将带有列表的列表对象转换为Java 8中的映射[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用流将对象列表转换为从 toString 方法获得的字符串

如何使用Java8流将列表列表转换为单个列表[重复]

将带有嵌套列表的列表转换为带有嵌套数据框的单行小标题

如何将列表列表转换为 Java 8 中的列表?

使用java流将两个相同大小(和不同类型)的列表组合到域对象列表中

Java 8如何操作一个列表中的对象并将其收集到另一个列表中? [重复]