如何使用Java streams移除列表中status为false的对象
实现方案
你可以通过Stream的filter算子筛选出status为true的Subject对象,再将过滤结果收集为新列表赋值回Student类的对应属性即可,具体代码如下:
基础实现
import java.util.List; import java.util.stream.Collectors; // 处理单个Student对象 public Student processStudent(Student student) { // 过滤subjects1 List<Subject> filteredSub1 = student.getSubjects1() .stream() .filter(Subject::isStatus) // 若你的status getter为getStatus(),则改为Subject::getStatus .collect(Collectors.toList()); student.setSubjects1(filteredSub1); // 过滤subjects2 List<Subject> filteredSub2 = student.getSubjects2() .stream() .filter(Subject::isStatus) .collect(Collectors.toList()); student.setSubjects2(filteredSub2); // 过滤subjects3 List<Subject> filteredSub3 = student.getSubjects3() .stream() .filter(Subject::isStatus) .collect(Collectors.toList()); student.setSubjects3(filteredSub3); return student; }
空指针兼容版本
如果存在subjects列表为null的场景,可以用Optional做判空处理避免NPE:
import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public Student processStudent(Student student) { List<Subject> filteredSub1 = Optional.ofNullable(student.getSubjects1()) .map(list -> list.stream() .filter(Subject::isStatus) .collect(Collectors.toList())) .orElse(null); // 列表为null时返回null,也可以改成orElse(Collections.emptyList())返回空列表 student.setSubjects1(filteredSub1); // subjects2、subjects3按相同逻辑处理即可 List<Subject> filteredSub2 = Optional.ofNullable(student.getSubjects2()) .map(list -> list.stream().filter(Subject::isStatus).collect(Collectors.toList())) .orElse(null); student.setSubjects2(filteredSub2); List<Subject> filteredSub3 = Optional.ofNullable(student.getSubjects3()) .map(list -> list.stream().filter(Subject::isStatus).collect(Collectors.toList())) .orElse(null); student.setSubjects3(filteredSub3); return student; }
批量处理学生列表
如果你需要批量处理多个Student对象,可以直接用Stream批量遍历:
List<Student> originalStudents = ...; // 原始学生列表 List<Student> processedStudents = originalStudents.stream() .map(this::processStudent) .collect(Collectors.toList());
内容的提问来源于stack exchange,提问作者Manonandan S K
相关产品推荐
相关产品推荐

