如果使用 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()));
}
如果 Subject
在 Student
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);
我正在使用 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()));
}
如果 Subject
在 Student
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);