ジェニファーローレンス :
私の質問は:人物のリストを考えると、すべての学生を返します。
ここに私のクラスは次のとおりです。
Personクラス
public class Person {
}
Studentクラス
public class Student extends Person {
}
方法
public static List<Student> findStudents(List<Person> list) {
return list.stream()
.filter(person -> person instanceof Student)
.collect(Collectors.toList());
}
私は、コンパイルエラーを取得しています: incompatible types: inference variable T has incompatible bounds
どのように私はこのエラーを取得せずにストリームを使用して、リストからすべての生徒を返します。
アンドリューTobilko:
return list.stream()
.filter(Student.class::isInstance)
.map(Student.class::cast)
.collect(Collectors.toList());
それはまだだ、そうでない場合は、そこにキャストする必要がありますStream<Person>
。instanceof
チェックは任意のキャストを実行しません。
Student.class::isInstance
そしてStudent.class::cast
私の単なる好みです、あなたが行くことができるp -> p instanceof Student
し、p -> (Student)p
それぞれ。