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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top