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

How to convert List to Map using Java Stream API?

我需要将 POJOList 转换为 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(..);
}

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

您可以使用 groupingBy:

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

旁白:对现有代码的小修正,避免未经检查的赋值使用:

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