Java 8 lambdas 组列表进入映射

2022-08-31 17:26:11

我想取一个和一个,其中的键是一个值,让我们称之为。List<Pojo>returnMap<String, List<Pojo>>MapStringPojoString key

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

Pojo 1: 键:a 值:1

Pojo 2: 键:a 值:2

Pojo 3: 键:b 值:3

Pojo 4: 键:b 值:4

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

如何使用Java 8 lambdas最好地实现这一目标?


答案 1

使用简单变体:groupingBy

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

答案 2

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

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

推荐