349 votes

Convertir la Collecte à la Liste

Je suis l'aide d' TreeBidiMap de la Apache Collections bibliothèque. Je veux ce sur les valeurs qui sont doubles.

Ma méthode consiste à extraire un Collection de la valeurs à l'aide de:
Collection coll = themap.values();
Qui, naturellement, fonctionne très bien.
Principale Question: maintenant, je veux savoir comment je peux convertir/cast (pas sûr de ce qui est correct) coll en List de sorte qu'il peut être triée?

J'ai alors l'intention d'effectuer une itération sur l'triés List de l'objet, qui doit être en ordre et d'obtenir les clés de l' TreeBidiMap (themap) à l'aide d' themap.getKey(iterator.next()) où l'itérateur sera sur la liste de l' doubles.

525voto

Paul Tomblin Points 83687
List list = new ArrayList(coll);
Collections.sort(list);

Comme Erel Segal Halevi dit ci-dessous, si le col est déjà une liste, vous pouvez passer à l'étape un. Mais cela en fonction sur le fonctionnement interne de TreeBidiMap.

List list;
if (coll instanceof List)
  list = (List)coll;
else
  list = new ArrayList(coll);

114voto

Jack Leow Points 11081

Quelque chose comme ceci devrait fonctionner:

List theList = new ArrayList(coll);

34voto

Erel Segal Halevi Points 2308

Je pense que Paul Tomblin la réponse peut être un gaspillage en cas coll est déjà une liste, car il va créer une nouvelle liste et une copie de tous les éléments. Si coll contient de nombreux elemeents, cela peut prendre du temps.

Ma suggestion est:

List list;
if (coll instanceof List)
  list = (List)coll;
else
  list = new ArrayList(coll);
Collections.sort(list);

10voto

OscarRyz Points 82553
Collections.sort( new ArrayList( coll ) );

:P

4voto

Nathan Perrier Points 74

@Kunigami: je pense que vous pouvez vous tromper sur Goyave l' newArrayList méthode. Il ne vérifie pas si l'Itérable est un type de Liste et il suffit de retourner la Liste donnée. Il toujours crée une nouvelle liste:

@GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elements) {
  checkNotNull(elements); // for GWT
  // Let ArrayList's sizing logic work, if possible
  return (elements instanceof Collection)
      ? new ArrayList<E>(Collections2.cast(elements))
      : newArrayList(elements.iterator());
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X