生徒ごとにコースを取得し、コースの名前に生徒のコースに一致するものがあるかどうかを確認します。
Course.java:
public class Course {
private String name;
public String getName() {
return name;
}
}
Student.java:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Student {
private List<Course> courses;
public List<Course> getCourses() {
return courses;
}
public static void main(String... args) {
List<Student> students = new ArrayList<>();
List<Student> algorithmsStudents = students.stream()
.filter(s -> s.getCourses().stream().anyMatch(c -> c.getName().equals("Algorithms")))
.collect(Collectors.toList());
}
}
編集:
List<Student> AlgorithmsCourserStudentList = studentList.stream().
filter(a -> a.stream().allMatch(c -> c.getCourseName.equal("Algorithms"))).
collect(Collectors.toList());
- ここにあなたのコードは、フィルタには、コンパイルされません'a'は学生であり、do stream()メソッドがありません。その後、あなたは
allMatch
利回りtrue
に、さらに学生を集めることができないため、リスト内のすべての要素が述語に一致する場合
- 次の場合、ストリームにコースの学生のリストを変換する
false
をflatMap()を使用することはできません一致しない要素が1つあります。したがって、コードが正しいとすれば、すべての生徒のコースに「アルゴリズム」という名前が付いているかどうかをテストしますが、条件に一致する要素が1つあるかどうかをテストしたいと考えています。 allMatch
とanyMatch
はの返品リストではなく、boolean
を返すため、フィルタで使用することができます。
:また、あなたは、次のよう
filter
でmethod references
を使用することができます説明を提供する。 –いいえ、私はこの回答に答えるうちに、他の答えは間違っていました。私がこれを入力している間に編集されました。 –