【问题标题】:Java 8 stream: list to flat map grouped by [duplicate]Java 8 流:列表到按 [重复] 分组的平面地图
【发布时间】: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

标签: java java-8 java-stream


【解决方案1】:

好像你想要这样的时间:

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

【讨论】:

  • 假设 id 是唯一的...
  • @shmosel 同意...
  • 我的解释是 OP 想要对多个 bs 进行分组和展平,但我可能错了。
  • @shmosel 确实,最初的问题上下文和问题标题仍然符合直觉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多