Рассматривая следующий пример:
List<String> people
= getPeople().stream()
.collect(collectingAndThen(toList(), Collections::unmodifiableList));
В этом примере я использую метод Collections::unmodifiableList
, поэтому давайте проверим исходный код:
/**
* Returns an unmodifiable view of the specified list. This method allows
* modules to provide users with "read-only" access to internal
* lists. Query operations on the returned list "read through" to the
* specified list, and attempts to modify the returned list, whether
* direct or via its iterator, result in an
* <tt>UnsupportedOperationException</tt>.<p>
*
* The returned list will be serializable if the specified list
* is serializable. Similarly, the returned list will implement
* {@link RandomAccess} if the specified list does.
*
* @param list the list for which an unmodifiable view is to be returned.
* @return an unmodifiable view of the specified list.
*/
public static <T> List<T> unmodifiableList(List<? extends T> list) {
return (list instanceof RandomAccess ?
new UnmodifiableRandomAccessList<>(list) :
new UnmodifiableList<>(list));
}
Как уже упоминалось в комментариях @Pshemo, UnmodifiableList
работает как обертка для вашего списка, вы также можете проверить в исходном коде, что этот класс содержит список внутри:
static class UnmodifiableList<E> extends UnmodifiableCollection<E>
implements List<E> {
private static final long serialVersionUID = -283967356065247728L;
final List<? extends E> list; // Here is the wrapped list
UnmodifiableList(List<? extends E> list) {
super(list);
this.list = list;
}
...
}
Исходный код, используемый для извлечения этих кодов, может быть найден здесь .
Итак, отвечая на ваш вопрос:
- Поток создает неизменяемый список, используя такие методы, как
Collections::unmodifiableList
method
- Внутренние потоки не добавляют ничего в другой список, поскольку
ImmutableList
просто работает как оболочка для Collection
Вы также можете проверить в документах и источниках, чтобы понять, насколько точно работают эти неизменяемые связанные методы и объекты.