【问题标题】:How to revert a Map<String, Collection<XYZ>> to Map<XYZ, Collection<String>> using streams如何使用流将 Map<String, Collection<XYZ>> 还原为 Map<XYZ, Collection<String>>
【发布时间】:2020-06-02 07:43:28
【问题描述】:

我有一张像 Map&lt;String, Collection&lt;XYZ&gt;&gt; 这样的地图,我对每个循环都进行了传统的迭代,以获得像 Map&lt;XYZ, Collection&lt;String&gt;&gt; 这样的结果,但同样我无法在地图上使用流。有关如何执行此操作的任何建议?

【问题讨论】:

  • 向我们展示你是如何循环执行的。

标签: java java-stream


【解决方案1】:

这可以通过将您的输入 Map 扁平化为 StringXYZ 对,然后将它们收集到所需的输出 Map 中来完成:

Map<String, Collection<XYZ>> input = ...
Map<XYZ, List<String>> output = 
   input.entrySet()
        .stream()
        .flatMap(e -> e.getValue()
                       .stream()
                       .map(xyz -> new SimpleEntry<XYZ,String>(xyz,e.getKey())))
        .collect(Collectors.groupingBy(Map.Entry::getKey,
                                       Collectors.mapping(Map.Entry::getValue,
                                                          Collectors.toList())));

请注意,输出 Map 中的值是 Lists 而不是 Collections。希望你不要介意(因为Lists 也是Collections)。

【讨论】:

  • 最近发现了一些类似的解决方案(不是问题),好向你学习。
猜你喜欢
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多