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()
)
)
);
我想取 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()
)
)
);