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

Joh*_*ohn 0 java grouping java-stream collectors

我需要转换ListPOJO,以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(..);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?你能帮助我吗?

Nam*_*man 5

您可以使用groupingBy

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

除了:在现有代码中进行较小的更正,请避免使用未经检查的分配:

List<MyClass> lst = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)