Je suis en train de faire ceci:
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
Pouvez-vous battre ça?
List<String> list = new ArrayList<String>(listOfTopicAuthors);
List<String> l = new ArrayList<String>(listOfTopicAuthors);
Considérant que nous avons Set<String> stringSet
, nous pouvons utiliser les éléments suivants:
List<String> strList = stringSet.stream().collect(Collectors.toUnmodifiableList());
import static Java.util.stream.Collectors.*;
List<String> stringList1 = stringSet.stream().collect(toList());
Selon le doc pour la méthode toList()
Il n'y a aucune garantie sur le type, la mutabilité, la sérialisabilité ou la sécurité des threads de la liste renvoyée. si vous avez besoin de plus de contrôle sur la liste renvoyée, utilisez toCollection (Supplier).
Donc, si nous avons besoin d’une implémentation spécifique, par ex. ArrayList
on peut l'obtenir de cette façon:
List<String> stringList2 = stringSet.stream().
collect(toCollection(ArrayList::new));
Nous pouvons utiliser la méthode Collections::unmodifiableList
et enrouler la liste renvoyée dans les exemples précédents. Nous pouvons également écrire notre propre méthode personnalisée en tant que:
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é consiste à utiliser la méthode collectingAndThen
qui permet d'effectuer une transformation finale avant de renvoyer 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
renvoie une vue non modifiable de la liste spécifiée, conformément à doc . Une collection de vues non modifiable est une collection qui est non modifiable et constitue également une vue sur une collection de supports. Notez que les modifications apportées à la collection de sauvegarde peuvent encore être possibles et, si elles se produisent, elles sont visibles via la vue non modifiable. Mais la méthode du collecteur Collectors.unmodifiableList
renvoie une liste vraiment immuable en Java 10 .
Essayez ceci pour Set :
Set<String> listOfTopicAuthors = .....
List<String> setList = new ArrayList<String>(listOfTopicAuthors);
Essayez ceci pour Map :
Map<String, String> listOfTopicAuthors = .....
// List of values:
List<String> mapValueList = new ArrayList<String>(listOfTopicAuthors.values());
// List of keys:
List<String> mapKeyList = new ArrayList<String>(listOfTopicAuthors.KeySet());
Si vous utilisez Guava, vous importez de manière statique la méthode newArrayList
de Listes classe:
List<String> l = newArrayList(setOfAuthors);
je ne sais pas vraiment ce que vous faites exactement via le contexte de votre code mais ...
pourquoi faire la variable listOfTopicAuthors
?
List<String> list = Arrays.asList((....).toArray( new String[0] ) );
le "...." représente cependant votre jeu est entré en jeu, qu'il soit neuf ou venu d'un autre endroit.