如果使用 java 流的列表中的一个变量为假,如何删除对象

How to remove object if one variable is false in list using java streams

我正在使用 java 8
我有一个模型 class 喜欢

class Student{
    String name;
    List<Subject> subjects1;
    List<Subject> subjects2;
    List<Subject> subjects3;
    // getters & setters
}

class Subject{
    String sub;
    Integer marks;
    boolean status;
    // getters & setters
}

status可能是对的也可能是错的。
现在,如果状态为 false,那么我必须从主题列表中删除这些对象
如何在 Streams 中实现?
提前致谢。

操作方法如下:

List<Student> studentsWithTrueStatus = students
  .stream()
  .filter( s -> s.status )
  .collect(Collectors.toList());

要移除对象,可以直接使用java中的removeIf方法 8.

student.getSubjects().removeIf(subject -> !subject.isStatus());

首先确保主题列表不为空。然后使用 removeIf() 方法。

List<Subject> subjectList = student.getSubjects();

if((null != subjectList) && (subjectList.size() > 0)) {
  subjectList.removeIf(sub -> !(sub.isStatus()));
}

如果 SubjectStudent class 中有多个列表,可以使用 Stream.of 连接它们,然后在 [=16] 中应用 removeIf =]:

// Some utility class MyClass
public static void removeSubjects(Student student) {
    Stream.of(student.getSubjects1(), student.getSubjects2(), student.getSubjects3())
        .filter(Objects::nonNull) // filter out null lists if any
        .forEach(subjects -> subjects.removeIf(sub -> !sub.isStatus()));
}

如果有一个学生列表,那么每个学生都可以参考上面实现的方法:

List<Students> students = Arrays.asList(...); // setup students list

students.forEach(MyClass::removeSubjects);