为了账号安全,请及时绑定邮箱和手机立即绑定

如何将不兼容类型的对象流式传输到列表中?

如何将不兼容类型的对象流式传输到列表中?

忽然笑 2023-08-23 15:00:33
我的问题是:给定一个人员名单,返回所有学生。这是我的课程:人物类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如何使用流返回列表中的所有学生而不会出现此错误。
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

return list.stream()
           .filter(Student.class::isInstance)
           .map(Student.class::cast)
           .collect(Collectors.toList());

它应该在那里进行强制转换,否则,它仍然是一个Stream<Person>. 该instanceof检查不执行任何强制转换。

Student.class::isInstanceStudent.class::cast只是我的偏好,您可以分别选择p -> p instanceof Studentp -> (Student)p


查看完整回答
反对 回复 2023-08-23
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

你需要一个演员:


public static List<Student> findStudents(List<Person> list) 

{

    return list.stream()

               .filter(person -> person instanceof Student) 

               .map(person -> (Student) person)

               .collect(Collectors.toList());

}


查看完整回答
反对 回复 2023-08-23
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

另一种选择。


public static List<Student> findStudents(List<Person> list) 

{

    return list.stream()

            .filter(s -> Student.class.equals(s.getClass()))

            .map(Student.class::cast)

            .collect(Collectors.toList());

}


查看完整回答
反对 回复 2023-08-23
  • 3 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信