Java 8 lambdas group list into map

Java 8 lambdas group list into map

我想取 List<Pojo>return Map<String, List<Pojo>> 其中 Map 的键是 [=16= 中的 String 值], 我们称它为 String key.

为了澄清,给出以下内容:

Pojo 1: Key:a value:1

Pojo 2: Key:a value:2

Pojo 3: Key:b value:3

Pojo 4: Key:b value:4

我想要一个 Map<String, List<Pojo>>keySet() 大小为 2,其中键 "a" 有 Pojos 1 和 2,键 "b" 有 pojos 3 和 4。

我怎样才能最好地使用 Java 8 个 lambda 来实现这个目标?

使用简单的 groupingBy 变体:

Map<String, List<Pojo>> map = pojos
  .stream()
  .collect(
     Collectors.groupingBy(Pojo::getKey)
  );

此外,如果您想 return 一个类似的地图,但您希望地图的值是 Pojo 的某些 属性 而不是整个 Pojo,您可以这样做:

Map<String, List<String>> map = pojos
  .stream()
  .collect(
    Collectors.groupingBy(
      Employee::getKey,
      Collectors.mapping(
        Pojo::getSomeStringProperty, 
        Collectors.toList()
      )
    )
  );