通过流将带有列表的列表对象转换为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 方法获得的字符串