Java 8 lambdas组列表进入映射

时间:2015-06-10 12:09:40

标签: java java-8 java-stream

我想要List<Pojo>return Map<String, List<Pojo>> Map的{​​{1}}个String值,Pojo,我们称之为String key

澄清一下,给出以下内容:

Pojo 1:Key:值:1

Pojo 2:Key:值:2

Pojo 3:Key:b值:3

Pojo 4:Key:b值:4

我想要Map<String, List<Pojo>> keySet()大小为2,其中键“a”包含Pojos 1和2,而键“b”包含pojos 3和4。

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

2 个答案:

答案 0 :(得分:57)

似乎简单的groupingBy变体就是您所需要的:

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

答案 1 :(得分:16)

另外,如果你想要返回一个类似的地图,但是你想要将地图的值作为Pojo的某些属性而不是整个Pojo,你会这样做:

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