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());
以下是makeStudent方法,null如果名称不可用则返回:
private Student makeStudent(String name, char gender) {
    return null != name ? new Student(name, gender) : null;
}
我以为Collectors.toList()会创造不变的.但是我错了.在list这里仍然是可变的.有没有更好的方法来使用单行进行list清理(删除null)和不可变java 8?
您可能会将代码重写为此代码:
list = list.stream()
           .filter(Objects::nonNull)
           .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
收集器collectAndThen允许您包装结果集合