@Carl, je dois soumettre l'ensemble dans une interface tierce qui nécessite une liste. @Tim Je souhaite pouvoir changer l'interface tierce pour utiliser Collection.
Jacques René Mesrine
1
Je vois; à moins de contraintes étranges, j'irais avec la réponse de Roger. Cependant, à moins que vous n'utilisiez à nouveau la liste, je ne l'attribuerai à rien (c'est-à-dire, utilisez foo.api (new ArrayList <String> (listOfTopicAuthors)) au lieu de foo.api (list)).
Carl
2
@ JacquesRenéMesrine: La première ligne de code en question est trompeuse: Prévue: Set<String> setOfTopicAuthors = ....Set<String> listOfTopicAuthors = ....
après cela, lorsque j'ai essayé d'accéder à l'élément de liste, cela me donnait une erreur, "java.lang.ClassCastException: java.lang.Integer ne peut pas être converti en java.lang.String" ..don; je ne sais pas pourquoi ... c'est simple list.get (int) c'est ça ... une suggestion?
CoDe
2
Je crois qu'en Java 7 et au-dessus, vous pouvez omettre le paramètre type pour ArrayListdonner: List<String> l = new ArrayList<>(listOfTopicAuthors); Plus concis sans utiliser de bibliothèque externe?
Brett Duncavage du
Il lèvera NullPointerException au cas où il listOfTopicAuthorsserait nul.
w35l3y
91
List<String> l =newArrayList<String>(listOfTopicAuthors);
pour avoir répondu dans la même minute que la réponse acceptée et ne pas avoir obtenu le crédit. +1
jayeffkay
@Adamski Je me retrouve avec une liste dont l'index commence à 1 au lieu de 0, un remède?
Jack
1
@Jack: Ce ne sera certainement pas le cas. À partir du Javadoc de java.util.List: "Les listes (comme les tableaux Java) sont basées sur zéro."
Adamski
@Adamski Merci pour la réponse. Je sais que les listes devraient être et sont basées sur zéro, c'est pourquoi cela m'est si étrange. Après avoir converti mon ensemble en liste, je ne peux effectuer aucune opération itérative dessus pour chaque tri, tri, etc. l'index commence à 1. Cependant, si je crée juste une liste normale, l'index commence à 0. Bizarre?
Jack
1
@Jack: Cela semble très bizarre. Si vous postez votre code en tant que question distincte, je suis sûr que quelqu'un pourra vous aider.
Adamski
23
Étant donné que nous avons, Set<String> stringSetnous pouvons utiliser les éléments suivants:
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:
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:
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 .
J'ai utilisé ceci pour convertir un Set<Double>en un List<Double, où l'ensemble provenait de LinkedHashMapla .keySet()méthode d'un. Eclipse m'a dit qu'il y avait une incompatibilité de type et que je ne pouvais pas convertir de Objectà List<Double>. Pourriez-vous me dire pourquoi cela a pu se produire? Je l'ai contourné par le casting, mais je me demandais pourquoi cela se produisait.
Ungeheuer
1
Oui, puisque les développeurs Java devraient utiliser de plus en plus de fonctionnalités Java 8, cette réponse est meilleure que les 2 réponses ci-dessus.
Map<String,String> listOfTopicAuthors =.....// List of values:List<String> mapValueList =newArrayList<String>(listOfTopicAuthors.values());// List of keys:List<String> mapKeyList =newArrayList<String>(listOfTopicAuthors.KeySet());
java.util.Collection
: O (0)Set<String> setOfTopicAuthors = ....
Set<String> listOfTopicAuthors = ....
List<String> list = Arrays.asList(setOfTopicAuthors.toArray(String[]::new))
, détaillée dans la réponse liée.Réponses:
la source
ArrayList
donner:List<String> l = new ArrayList<>(listOfTopicAuthors);
Plus concis sans utiliser de bibliothèque externe?listOfTopicAuthors
serait nul.la source
Étant donné que nous avons,
Set<String> stringSet
nous pouvons utiliser les éléments suivants:Java 10 (liste non modifiable)
Java 8 (listes modifiables)
Selon le doc de la méthode
toList()
Donc, si nous avons besoin d'une implémentation spécifique, par exemple,
ArrayList
nous pouvons l'obtenir de cette façon: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:Et puis utilisez-le comme:
Une autre possibilité est d'utiliser une
collectingAndThen
méthode qui permet d'effectuer une transformation finale avant de retourner le résultat: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 collecteurCollectors.unmodifiableList
renvoie une liste vraiment immuable dans Java 10 .la source
Set<Double>
en unList<Double
, où l'ensemble provenait deLinkedHashMap
la.keySet()
méthode d'un. Eclipse m'a dit qu'il y avait une incompatibilité de type et que je ne pouvais pas convertir deObject
àList<Double>
. Pourriez-vous me dire pourquoi cela a pu se produire? Je l'ai contourné par le casting, mais je me demandais pourquoi cela se produisait.Essayez ceci pour Set :
Essayez ceci pour la carte :
la source
Si vous utilisez Guava, vous importez statiquement la
newArrayList
méthode de la classe Lists :la source
pas vraiment sûr de ce que vous faites exactement via le contexte de votre code mais ...
pourquoi faire la
listOfTopicAuthors
variable du tout?le "...." représente la manière dont votre jeu est entré en jeu, qu'il soit nouveau ou qu'il provienne d'un autre endroit.
la source