如何从Person对象List中获取最后一个personStatus非空的元素
实现方案
你现有代码存在编译问题:filter()是Stream的中间操作,执行后返回的是Stream<Person>类型,无法直接赋值给List<Person>,需要补充终止操作才能得到集合结果。
要获取符合条件的最后一个Person对象,可以参考以下两种实现:
方案1:Stream + reduce实现
适合小数据量场景,写法简洁:
List<Person> personList = getAllPersons(); // reduce每次保留后一个元素,最终得到最后一个符合条件的对象,用Optional做空安全处理 Optional<Person> lastValidPerson = personList.stream() .filter(person -> person.getPersonStatus() != null) .reduce((prev, curr) -> curr); // 按需获取结果,无符合条件元素时返回null Person result = lastValidPerson.orElse(null); // 也可以选择无符合元素时抛出异常:lastValidPerson.orElseThrow(() -> new RuntimeException("无符合条件的人员"))
方案2:倒序遍历实现
适合大数据量场景,性能更高,不需要遍历整个列表,找到第一个符合条件的元素即可返回:
List<Person> personList = getAllPersons(); Person result = null; // 从列表尾部开始倒序遍历 for (int i = personList.size() - 1; i >= 0; i--) { Person person = personList.get(i); if (person.getPersonStatus() != null) { result = person; break; } }
两种方案都自动处理了无符合条件元素的场景,不会抛出空指针,你可以根据业务场景自行选择。
内容的提问来源于stack exchange,提问作者user7833845
相关产品推荐
相关产品推荐

