我有一个Map列表,我想使用java流将其按键nom分组。

[
      {
        "dateDebut": "2018-07-01T00:00:00.000+0000",
        "nom": "Julien Mannone",
        "etat": "Impayé"
      },
      {
        "dateDebut": "2018-08-01T00:00:00.000+0000",
        "nom": "Julien Mannone",
        "etat": "Impayé"
      },
      {
        "dateDebut": "2018-10-01T00:00:00.000+0000",
        "nom": "Mathiew Matic",
        "etat": "payé"
      },
      {
        "dateDebut": "2018-10-01T00:00:00.000+0000",
        "nom": "Ash Moon",
        "etat": "payé"
      }
    ]

所以我想要这样的结果
{
   "Julien Mannone":[
      {
         "dateDebut":"2018-07-01T00:00:00.000+0000",
         "etat":"Impayé"
      },
      {
         "dateDebut":"2018-08-01T00:00:00.000+0000",
         "etat":"Impayé"
      }
   ],
   "Mathiew Matic":[
      {
         "dateDebut":"2018-10-01T00:00:00.000+0000",
         "etat":"payé"
      }
   ],
   "Ash Moon":[
      {
         "dateDebut":"2018-10-01T00:00:00.000+0000",
         "etat":"payé"
      }
   ]
}

作为使用流的初学者,我进行了一些研究,发现了一些类似的代码
Map<String, List<Map>> afterFormatting =
        beforeFormatting.stream()
                .flatMap(m -> m.entrySet().stream())
                .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toList())));

但这对我没有用

最佳答案

似乎您只是在寻找:

Map<String, List<Map<String, String>>> afterFormatting =
            beforeFormatting.stream()
                            .collect(Collectors.groupingBy(map -> map.get("nom")));

或者,如果您不希望结果集中的每个Map<String, String>都包含“nom”条目,则可以执行以下操作:
Map<String, List<Map<String, String>>> afterFormatting =
     beforeFormatting.stream()
                     .collect(Collectors.groupingBy(map -> map.get("nom"),
                           Collectors.mapping(map -> {
                                Map<String, String> temp = new HashMap<>(map);
                                temp.remove("nom");
                               return temp;
                     }, Collectors.toList())));

08-05 07:09
查看更多