La façon la plus concise pour convertir un ensemble à une liste
-
22-09-2019 - |
Question
Je suis en train de faire ceci:
Set<String> setOfTopicAuthors = ....
List<String> list = Arrays.asList(
setOfTopicAuthors.toArray( new String[0] ) );
Pouvez-vous battre cela?
La solution
List<String> list = new ArrayList<String>(listOfTopicAuthors);
Autres conseils
List<String> l = new ArrayList<String>(listOfTopicAuthors);
Étant donné que nous avons Set<String> stringSet
nous pouvons utiliser ce qui suit:
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());
par doc pour la méthode toList()
Il n'y a aucune garantie sur le type, la mutabilité, sérialisation, ou fil de sécurité de la liste retournée; si plus de contrôle sur le revenu Liste est nécessaire, utilisez toCollection (fournisseur).
Donc, si nous avons besoin d'une mise en œuvre 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 modifiable)
Nous pouvons utiliser la méthode de Collections::unmodifiableList
et envelopper la liste retourné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 comme:
List<String> stringList3 = stringSet.stream()
.collect(ImmutableCollector.toImmutableList(ArrayList::new));
Une autre possibilité est d'utiliser la méthode de collectingAndThen
qui permet une transformation finale à faire avant le retour 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 doc . Une collection de vue non modifiable est une collection qui est non modifiable et est également une vue sur un ensemble de support. Notez que les modifications à la collection de soutien pourrait encore être possible, et si elles se produisent, ils sont visibles dans la vue non modifiable. Mais la méthode de collecteur Collectors.unmodifiableList
retourne la liste vraiment immuable dans Java 10 .
Essayer cette Set :
Set<String> listOfTopicAuthors = .....
List<String> setList = new ArrayList<String>(listOfTopicAuthors);
Essayer cette Carte :
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 goyave, vous importez statiquement méthode newArrayList
Listes classe:
List<String> l = newArrayList(setOfAuthors);
pas vraiment sûr de ce que vous faites exactement par le contexte de votre code, mais ...
Pourquoi faire de la variable listOfTopicAuthors
du tout?
List<String> list = Arrays.asList((....).toArray( new String[0] ) );
« .... » représente cependant votre jeu est entré en jeu, que ce soit nouveau ou est venu d'un autre endroit.