Java 从学生对象列表中删除空对象
我正在探索Java8的特性,以便从一个比如Student对象的列表中删除空对象,我有以下代码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
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}
我错过了什么特别的东西吗
谢谢
RonanremoveIf(Objects::isNull)
正在删除给定列表中Student
对象null
,而不是所有名称为null
的学生。您可以使用.removeIf(student->student.getName()==null)实现您想要的功能。
只是为了记录:更明智的方法是A)不允许空学生,B)首先是空名字的学生;-)感谢@GhostCat,我同意,但为了以防万一,如果出现null,那么代码应该处理它,我想探索Java8的特性来删除null,而不是使用旧的前Java8样式。谢谢,只是想知道为什么ls.removeAll(Collections.singleton(null));如果需要一个谓词,则移除也不起作用