使用流将对象列表转换为 Map<Long, List<>>

Ann*_*Ann 8 java java-8 java-stream

我想将 Student 对象列表转换为Map<Long, List<>>using streams.

List<Student> list = new ArrayList<Student>();
list.add(new Student("1", "test 1"));
list.add(new Student("3", "test 1"));
list.add(new Student("3", "test 3"));
Run Code Online (Sandbox Code Playgroud)

我希望最终结果如下:

地图

关键:1

值列表: Student("1", "test 1")

钥匙:3

值列表: Student("3", "test 1"), Student("3", "test 3")

我尝试了以下代码,但它正在重新初始化Student对象。谁能帮我修复下面的代码?

List<Student> list = new ArrayList<Student>();
list.add(new Student("1", "test 1"));
list.add(new Student("3", "test 1"));
list.add(new Student("3", "test 3"));
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 13

您不需要链接mapping收集器。默认情况下,单个参数groupingBy将为您提供一个Map<Long, List<Student>>

Map<Long, List<Student>> map = 
    list.stream()
        .collect(Collectors.groupingBy(Student::getId));
Run Code Online (Sandbox Code Playgroud)


Arv*_*ash 6

Eran回答是准确的。只是为了补充一点,您还可以使用Supplier例如

Map<Long, List<Student>> map = 
    list.stream()
        .collect(Collectors.groupingBy(Student::getId, TreeMap::new, Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)