假设我有一个名为
Student
的对象列表。对象 Student
定义为
public class Student {
private String studentName;
private String courseTaking;
}
在学生列表中,可以存在多个具有相同
studentName
但不同课程的学生对象。现在我想把学生名单变成studentName
和courseTaking
的地图,就像这样
Map<String, Set<String>>
键是
studentName
,值是同一学生的所有courseTaking
放在一起作为一个Set
。我如何使用 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;
}
}
}
}
产量
{Andreas=[Kotlin 205], Zoff=[Java 101, CompSci 104, Lit 110]}