有一个Person对象列表。
List<Person> persons = generatePersons();
用它创建了一个不可修改的列表。
List<Person> unmodifiableList = Collections.unmodifiableList(persons);
我知道它unmodifiableList不支持添加/删除/设置操作。同时,它不是不可变的,因为它引用了现有的可修改列表,persons并且每当对persons列表进行更改时,更改也会反映在其中unmodifiableList。
以这种方式创建了一个不可变的列表。
List<Person> immutableList = Collections.unmodifiableList(new ArrayList<>(persons));
这将创建一个不可变列表,因为正在使用转换构造函数。不能对任何添加/删除/设置操作执行,immutableList原始列表中的任何更改也persons不会反映在immutableList. 让我们假设Person对象也是不可变的。
现在,我想使用流创建这两个列表。
第一个,我使用以下方法创建:
List<Person> unmodifiablePersons = persons.stream()
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
我在通过流创建相当于 immutableList 的过程中迷失了方向。
我怎样才能做到这一点?
编辑:
我Person在原始列表中添加了一个新对象persons并打印了persons列表和unmodifiablePersons. 两者都给我相同的大小。因此,更改正在反映到unmodifiablePersons,因此它还不是一成不变的。我在这里错过了什么吗?
编辑 2
愚蠢的。应该通过文档。unmodifiablePersons确实是一个不可变的列表。此外,新Person对象是在unmodifiablePersons创建之前添加的,因此上述观察结果。超级傻。
拉莫斯之舞
ITMISS
随时随地看视频慕课网APP
相关分类