You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:36:03