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

时间:2019-05-27 19:42:04

标签: java

我正在探索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}

我是否缺少某些特定的东西?

谢谢 罗南

1 个答案:

答案 0 :(得分:3)

removeIf(Objects::isNull)正在删除给定列表中的任何Student对象null,并非每个name的学生都是null。您可以使用.removeIf(student -> student.getName() == null)

来实现自己的目标