【问题标题】:How to group VALUES of same KEY of map in a List<Map<String,String>> in JAVA?如何在 JAVA 中的 List<Map<String,String>> 中对 map 的相同 KEY 的 VALUES 进行分组?
【发布时间】:2020-09-22 11:51:27
【问题描述】:

我有一个 Map 列表,其中有许多相似的键。 所以我想将相同键的值分组为List&lt;Map&lt;String,List&lt;String&gt;&gt;&gt;

注意:- 这里地图的键是未知的

Input - 
List<Map<String,String>> list = [{CLEANING=cleaning1}, {CLEANING=cleaning2}, {CLEANING=cleaning3}, {CLEANING=cleaning4}, {PAPER=paper1}, {PAPER=paper2}, {PAPER=paper3}, {PAPER=paper4}]

Output - 
List<Map<String,List<String>>> outputList = [{CLEANING,[cleaning1,cleaning2,cleaning3,cleaning4]},{PAPER,[paper1,paper2,paper3,paper4]}]

【问题讨论】:

  • StackOverflow 不是代码编写服务。您已经尝试过什么,遇到了什么问题?
  • 有时,输入看起来很奇怪,因为它们来自某些程序。这是可以理解的。但是,在您的输出中,外部 List 的目的是什么?一张地图可以包含多个键
  • 是的......你可以尝试任何方式@Kent
  • @MrFreak 可以尝试什么方法?

标签: java list arraylist hashmap set


【解决方案1】:

不确定为什么需要列表中的单条目映射,但它看起来更好的结构,因为结果将只是一个 Map&lt;String, List&lt;String&gt;&gt;

这是您可以通过流使用的代码。

public static void main(String[] args) {
    List<Map<String, String>> list = List.of(
        Map.of("CLEANING", "1"),
        Map.of("CLEANING", "2"),
        Map.of("PAPER", "1")
    );

    List<Map<String, List<String>>> result1 = list.stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())))
        .entrySet().stream()
        .map(e -> Map.of(e.getKey(), e.getValue()))
        .collect(toList());

    Map<String, List<String>> result2 = list.stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));

    System.out.println(result1); // [{CLEANING=[1, 2]}, {PAPER=[1]}]
    System.out.println(result2); // {CLEANING=[1, 2], PAPER=[1]}
}

【讨论】:

    【解决方案2】:
    Map<String,List<String>>
    

    检查键是否存在,然后附加到字符串,否则添加键并为其分配具有该字符串的列表。 您是否希望您的列表只使用一组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多