Étant donné que nous avons, Set<String> stringSet
nous pouvons utiliser les éléments suivants:
Java 10 (liste non modifiable)
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
Java 8 (listes modifiables)
import static java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Selon le doc de la méthodetoList()
Il n'y a aucune garantie sur le type, la mutabilité, la sérialisation ou la sécurité des threads de la liste retournée; si davantage de contrôle sur la liste retournée est nécessaire, utilisez toCollection (fournisseur).
Donc, si nous avons besoin d'une implémentation spécifique, par exemple, ArrayList
nous pouvons l'obtenir de cette façon:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Java 8 (listes non modifiables)
Nous pouvons utiliser la Collections::unmodifiableList
méthode et encapsuler la liste renvoyée dans les exemples précédents. Nous pouvons également écrire notre propre méthode personnalisée comme:
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);
}
}
Et puis utilisez-le comme:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Une autre possibilité est d'utiliser une collectingAndThen
méthode qui permet d'effectuer une transformation finale avant de retourner le résultat:
List<String> stringList4 = stringSet.stream().collect(collectingAndThen(
toCollection(ArrayList::new),Collections::unmodifiableList));
Un point à noter est que la méthode Collections::unmodifiableList
retourne une vue non modifiable de la liste spécifiée, selon la doc . Une collection de vues non modifiables est une collection non modifiable et est également une vue sur une collection de supports. Notez que des modifications de la collection de supports peuvent toujours être possibles et si elles se produisent, elles sont visibles à travers la vue non modifiable. Mais la méthode du collecteur Collectors.unmodifiableList
renvoie une liste vraiment immuable dans Java 10 .
java.util.Collection
: O (0)