我正在探索Java 8功能,以从“说说”对象列表中删除空对象,并且我有以下代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student {" + "name=" + name + "}";
}
public static Comparator<Student> getNameComparator() {
return (s1, s2) -> s1.name.compareTo(s2.name);
// return Comparator.comparing(x -> x.name,
// Comparator.nullsLast(Comparator.naturalOrder()));
}
public static void main(String[] args) {
List<Student> ls = new ArrayList<>(
Arrays.asList(new Student("Dino"), new Student(null), new Student("Fred"), new Student("Amy")));
// ls.removeAll(Collections.singleton(null));
ls.removeIf(Objects::isNull);
ls.forEach(s -> System.out.println(s));
System.out.println("...............................");
ls.sort(Student.getNameComparator());
ls.forEach(s -> System.out.println(s));
}
}
我使用了Java 8特定的isNull,即ls.removeIf(Objects::isNull);
仍在o / p中,我看到空值
即
O / p为
学生{name = Dino}学生{name = null}学生{name = Fred}学生 {name = Amy}
我是否缺少某些特定的东西?
谢谢 罗南
答案 0 :(得分:3)
removeIf(Objects::isNull)
正在删除给定列表中的任何Student
对象null
,并非每个name
的学生都是null
。您可以使用.removeIf(student -> student.getName() == null)