我的问题是:给定人员列表,返回所有学生。
这是我的课程:
人员班
public class Person {
}
学生班
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
如何使用流从列表中返回所有学生,而不会出现此错误。
答案 0 :(得分:12)
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
。
答案 1 :(得分:5)
您需要强制转换:
public static List<Student> findStudents(List<Person> list)
{
return list.stream()
.filter(person -> person instanceof Student)
.map(person -> (Student) person)
.collect(Collectors.toList());
}
答案 2 :(得分:1)
另一种选择。
synchronized (obj) {
if (!obj.has_result) {
obj.wait();
}
return obj.result;
}