Étant donné que nous avons, Set<String> stringSetnous 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, ArrayListnous 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::unmodifiableListmé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 collectingAndThenmé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::unmodifiableListretourne 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.unmodifiableListrenvoie une liste vraiment immuable dans Java 10 .
java.util.Collection: O (0)