Учитывая, что у нас есть, 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 (Supplier).
Поэтому, если нам нужна конкретная реализация, например, 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)