删除null元素后java8 make immutable List

Sri*_*har 1 arraylist immutability java-8

我知道Arrays.asList创造不变List.我的要求是创建不可变的List<Student>,不包含任何null元素.所以我new ArrayList()先创建然后null使用java 8 删除元素filters,如下所示:

List<Student> list = new ArrayList<>();
list.add(makeStudent("ram", 'M'));
list.add(makeStudent("sathya", 'F'));
list.add(makeStudent(null, 'M'));
list.add(makeStudent("sri", 'M'));

list = list.stream().filter(s -> s != null).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

以下是makeStudent方法,null如果名称不可用则返回:

private Student makeStudent(String name, char gender) {
    return null != name ? new Student(name, gender) : null;
}
Run Code Online (Sandbox Code Playgroud)

我以为Collectors.toList()会创造不变的.但是我错了.在list这里仍然是可变的.有没有更好的方法来使用单行进行list清理(​​删除null)和不可变java 8

Rom*_*hyn 5

您可能会将代码重写为此代码:

list = list.stream()
           .filter(Objects::nonNull)
           .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
Run Code Online (Sandbox Code Playgroud)

收集器collectAndThen允许您包装结果集合