Considerando che abbiamo Set<String> stringSet
possiamo usare quanto segue:
Java 10 (Elenco non modificabile)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (Elenchi modificabili)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Come da documento per il metodotoList()
Non vi sono garanzie sul tipo, la mutabilità, la serializzabilità o la sicurezza dei thread dell'elenco restituito; se è necessario un maggiore controllo sull'elenco restituito, utilizzare toCollection (fornitore).
Quindi, se abbiamo bisogno di un'implementazione specifica, ad esempio ArrayList
, possiamo ottenerla in questo modo:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (Elenchi non modificabili)
Possiamo usare il Collections::unmodifiableList
metodo e racchiudere l'elenco restituito negli esempi precedenti. Possiamo anche scrivere il nostro metodo personalizzato come:
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);
}
}
E poi usalo come:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Un'altra possibilità è quella di utilizzare il collectingAndThen
metodo che consente di eseguire alcune trasformazioni finali prima di restituire il risultato:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Un punto da notare è che il metodo Collections::unmodifiableList
restituisce una vista non modificabile dell'elenco specificato, come da documento . Una raccolta di viste non modificabile è una raccolta non modificabile ed è anche una vista su una raccolta di supporto. Si noti che le modifiche alla raccolta di backup potrebbero essere ancora possibili e, se si verificano, sono visibili attraverso la vista non modificabile. Ma il metodo collector Collectors.unmodifiableList
restituisce un elenco davvero immutabile in Java 10 .
java.util.Collection
: O (0)