Java convert a list to a map of sets
本问题已经有最佳答案,请猛点这里访问。
假设我有一个名为Student的对象列表。 对象学生的定义是这样的
在学生列表中,可以有多个学生对象具有相同的studentName但不同的courseTaking。 现在我想将学生列表转换为studentName和courseTaking的地图
1 |
关键是studentName,并且该值是同一个学生作为一组放在一起的所有课程。 我怎么能用stream()和amp; 搜集()?
我想这就是你要找的东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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