Java将列表转换为集合的映射

假设我有一个名为Student的对象列表。 对象学生是这样定义的

public Class Student { private String studentName; private String courseTaking; } 

在学生名单中,可以有多个具有相同studentName但不同courseTaking的学生对象。 现在我想把学生名单变成一个studentName和course的地图像这样

 Map<String, Set<String>> 

关键是studentName,价值就是把同一个学生的所有课程作为一个整体放在一起。 我怎样才能使用stream()和collect()?

我想这是你要找的东西:

 import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; public class StackOverflow { private static class SO46310655 { public static void main(String[] args) { final List<Student> students = new ArrayList<>(); students.add(new Student("Zoff", "Java 101")); students.add(new Student("Zoff", "CompSci 104")); students.add(new Student("Zoff", "Lit 110")); students.add(new Student("Andreas", "Kotlin 205")); Map<String, Set<String>> map = students.stream().collect( Collectors.groupingBy( Student::getStudentName, Collectors.mapping( Student::getCourseTaking, Collectors.toSet() ) ) ); System.out.println(map); } public static class Student { private final String studentName; private final String courseTaking; public Student(String studentName, String courseTaking) { this.studentName = studentName; this.courseTaking = courseTaking; } public String getStudentName() { return studentName; } public String getCourseTaking() { return courseTaking; } } } } 

yeilds {Andreas=[Kotlin 205], Zoff=[Java 101, CompSci 104, Lit 110]}