Java 从学生对象列表中删除空对象

Java 从学生对象列表中删除空对象,java,Java,我正在探索Java8的特性,以便从一个比如Student对象的列表中删除空对象,我有以下代码 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 Strin

我正在探索Java8的特性,以便从一个比如Student对象的列表中删除空对象,我有以下代码

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));

    }

}
import java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
导入java.util.Objects;
公立班学生{
私有字符串名称;
公立学生(字符串名称){
this.name=名称;
}
@凌驾
公共字符串toString(){
返回“Student{“+”name=“+name+”}”;
}
公共静态比较器getNameComparator(){
return(s1,s2)->s1.name.compareTo(s2.name);
//返回比较器。比较(x->x.name,
//Comparator.nullsLast(Comparator.naturalOrder());
}
公共静态void main(字符串[]args){
List ls=新阵列列表(
asList(新学生(“Dino”)、新学生(null)、新学生(“Fred”)、新学生(“Amy”);
//ls.removeAll(Collections.singleton(null));
ls.removeIf(Objects::isNull);
ls.forEach->System.out.println;
系统输出打印项次(“……”);
ls.sort(Student.getnameparator());
ls.forEach->System.out.println;
}
}
我使用了Java8特定的isNull,即
ls.removeIf(Objects::isNull)仍在o/p中我看到空值
即
O/p为

学生{name=Dino}学生{name=null}学生{name=Fred}学生 {name=Amy}

我错过了什么特别的东西吗

谢谢
Ronan

removeIf(Objects::isNull)
正在删除给定列表中
Student
对象
null
,而不是所有
名称
null
的学生。您可以使用
.removeIf(student->student.getName()==null)实现您想要的功能。

只是为了记录:更明智的方法是A)不允许空学生,B)首先是空名字的学生;-)感谢@GhostCat,我同意,但为了以防万一,如果出现null,那么代码应该处理它,我想探索Java8的特性来删除null,而不是使用旧的前Java8样式。谢谢,只是想知道为什么ls.removeAll(Collections.singleton(null));如果
需要一个
谓词,则
移除也不起作用