Biorąc pod uwagę, że mamy, Set<String> stringSet
możemy użyć następujących elementów:
Java 10 (lista niemodyfikowalna)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Listy modyfikowalne)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Zgodnie z dokumentem dla metodytoList()
Nie ma żadnych gwarancji dotyczących rodzaju, zmienności, serializacji lub bezpieczeństwa wątków zwracanej listy; jeśli wymagana jest większa kontrola nad zwróconą listą, użyj funkcji toCollection (dostawca).
Jeśli więc potrzebujemy konkretnej implementacji, np. ArrayList
Możemy ją uzyskać w ten sposób:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Listy niemodyfikowalne)
Możemy skorzystać z Collections::unmodifiableList
metody i zawinąć listę zwróconą w poprzednich przykładach. Możemy również napisać własną metodę niestandardową jako:
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);
}
}
A następnie użyj go jako:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Inną możliwością jest użycie collectingAndThen
metody, która pozwala na dokonanie ostatecznej transformacji przed zwróceniem wyniku:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Jeden punkt, aby pamiętać, jest to, że metoda Collections::unmodifiableList
zwraca niemodyfikowalne widok podanej listy, jak na doc . Kolekcja niemodyfikowalna jest kolekcją niemodyfikowalną, a także widokiem na kolekcję podkładową. Należy pamiętać, że zmiany w kolekcji kopii zapasowych mogą być nadal możliwe, a jeśli wystąpią, są widoczne w widoku niemodyfikowalnym. Ale metoda kolektora Collectors.unmodifiableList
zwraca naprawdę niezmienną listę w Javie 10 .
java.util.Collection
: O (0)