Syn*_*ter 4 java collections java-8 java-stream
这可能是一个简单的Java流问题.说,我有一个List<Student>对象.
public class Student {
public String name;
public Set<String> subjects;
public Set<String> getSubjects() {
return subjects;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得学生名单上的所有科目?
我可以使用for each循环来完成此操作.如何将以下代码转换为使用Streams?
for (Student student : students) {
subjectsTaken.addAll(student.getSubjects());
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试使用Java 8流.这给了我一个Incompatible types错误.
Set<String> subjectsTaken = students.stream()
.map(student -> student.getSubjects())
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
您当前的代码生成a Set<Set<String>>而不是a Set<String>.
你应该使用flatMap,而不是map:
Set<String> subjectsTaken =
students.stream() // Stream<Student>
.flatMap(student -> student.getSubjects().stream()) // Stream<String>
.collect(Collectors.toSet()); // Set<String>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |