Враховуючи, що ми маємо, Set<String> stringSet
ми можемо використовувати наступне:
Java 10 (список, що не змінюється)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Змінні списки)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Відповідно до документа для методуtoList()
Немає гарантій щодо типу, змінності, серіалізаційності або безпеки потоку поверненого списку; якщо потрібен більше контроль над поверненим списком, використовуйте toCollection (постачальник).
Отже, якщо нам потрібна конкретна реалізація, наприклад, ArrayList
ми можемо отримати це таким чином:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Немодифіковані списки)
Ми можемо скористатися Collections::unmodifiableList
методом і перегорнути список, повернутий у попередніх прикладах. Ми також можемо записати свій власний метод як:
class ImmutableCollector {
public static <T> Collector<T, List<T>, List<T>> toImmutableList(Supplier<List<T>> supplier) {
return Collector.of( supplier, List::add, (left, right) -> {
left.addAll(right);
return left;
}, Collections::unmodifiableList);
}
}
А потім використовуйте його як:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Інша можливість полягає у використанні collectingAndThen
методу, який дозволяє зробити остаточне перетворення перед поверненням результату:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Одним із зауважень є те, що метод Collections::unmodifiableList
повертає немодифікований вигляд зазначеного списку, згідно док . Колекція немодифікованих представлень - це колекція, яка не піддається зміні, а також є переглядом на колекцію підкладки. Зауважте, що зміни в резервній колекції все ще можливі, і якщо вони відбудуться, вони будуть видимими через немодифікований вигляд. Але метод збирача Collectors.unmodifiableList
повертає справді незмінний список на Java 10 .
java.util.Collection
: O (0)