Java 8 流:列表到按 [重复] 分组的平面地图

Posted

技术标签:

【中文标题】Java 8 流:列表到按 [重复] 分组的平面地图【英文标题】:Java 8 stream: list to flat map grouped by [duplicate] 【发布时间】:2018-04-12 07:49:26 【问题描述】:

我有以下情况。 (伪代码)

class A 
  id;
  List<B> bs;


class B 

我想知道如何转换 List os As -> Map of Bs

List<A> as;

// the Map key is A.id (Map<A.id, List<B>>)
Map<Integer, List<B>> bs = as.stream()
                       .map(a ->a.getBs())
                       .collect(// I dont know what to add here ???);

【问题讨论】:

Map&lt;Integer, B&gt;Map&lt;Integer, List&lt;B&gt;&gt; ? 你打算如何处理一个键的几个值? 对不起,我的意思是 Map>,(已更正) 这里我举了很多例子。您可能会发现它对您的问题很有用javagists.com/java-8-streams-list-to-map-examples 【参考方案1】:

好像你想要这样的时间:

 Map<Integer, List<B>> bs = as.stream()
        .collect(Collectors.toMap(A::getId, A::getBs));

【讨论】:

假设 id 是唯一的... @shmosel 同意... 我的解释是 OP 想要对多个 bs 进行分组和展平,但我可能错了。 @shmosel 确实,最初的问题上下文和问题标题仍然符合直觉。

以上是关于Java 8 流:列表到按 [重复] 分组的平面地图的主要内容,如果未能解决你的问题,请参考以下文章

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

尝试将行附加到按对象分组中的每个组时的奇怪行为

从带有流java 8的列表中搜索包含寄存器内部分文本的寄存器[重复]

Java 8 Streams - 分组为单个值[重复]

Java 8,流查找重复元素

有条件地从 Java 8 中的列表中删除元素 [重复]