如何使用Java Stream API将列表转换为Map?

时间:2019-11-11 15:57:34

标签: java java-stream grouping collectors

我需要将List中的POJO转换为Map<Integer, List<MyClass>>,其中键是MyClass中的值。以下代码如下所示:

public class MyClass {
    public int id;         // this field value must be key of map.
    public String name;
}

public static void main(String... args) {
    List<MyClass> lst = new ArrayList();
    lst.add(new MyClass(1, "John"));
    lst.add(new MyClass(1, "Peter"));
    lst.add(new MyClass(2, "Sarah"));

    Map<Integer, List<MyClass>> res = lst.collect(..);
}

我该怎么做?你能帮我吗?

1 个答案:

答案 0 :(得分:5)

您可以使用groupingBy

Map<Integer, List<MyClass>> res = lst.stream()
            .collect(Collectors.groupingBy(MyClass::getId));

旁边:现有代码中的较小修正,请避免使用以下未检查的赋值:

List<MyClass> lst = new ArrayList<>();