Estoy usando TreeBidiMap
de la biblioteca Apache Collections . Quiero ordenar esto en los valores que son doubles
.
Mi método es recuperar uno Collection
de los valores usando:
Collection coll = themap.values();
Que naturalmente funciona bien.
Principal Pregunta: Ahora quiero saber cómo puedo convertir / molde (no estoy seguro que es correcto) coll
en una List
manera que puede ser ordenada?
Luego tengo la intención de iterar sobre el List
objeto ordenado , que debe estar en orden y obtener las claves apropiadas de TreeBidiMap
( themap
) usando themap.getKey(iterator.next())
donde el iterador estará sobre la lista de doubles
.
TreeBidiMap
es unOrderedMap
, el orden debe estar bien. La clasificación requerida en la pregunta está en valores, no en claves.Respuestas:
Como dice Erel Segal Halevi a continuación, si coll ya es una lista, puede omitir el paso uno. Pero eso dependería de lo interno de TreeBidiMap.
fuente
Algo como esto debería funcionar, llamando al constructor ArrayList que toma una colección:
fuente
Creo que la respuesta de Paul Tomblin puede ser un desperdicio en caso de que coll ya sea una lista, porque creará una nueva lista y copiará todos los elementos. Si el coll contiene muchos elementos, esto puede llevar mucho tiempo.
Mi sugerencia es:
fuente
Creo que puedes escribirlo así:
fuente
fuente
@Kunigami: Creo que puede estar equivocado sobre el
newArrayList
método de Guava . No comprueba si el Iterable es un tipo de Lista y simplemente devuelve la Lista dada como está. es siempre crea una nueva lista:fuente
Lo que solicita es una operación bastante costosa, asegúrese de no tener que hacerlo con frecuencia (por ejemplo, en un ciclo).
De lo contrario, puede crear una colección personalizada. Se me ocurrió uno que tiene tu
TreeBidiMap
yTreeMultiset
debajo del capó. Implemente solo lo que necesita y preocúpese por la integridad de los datos.De esta manera, usted tiene una ordenados
Multiset
de regresar devalues()
. Sin embargo, si necesita que sea una lista (por ejemplo, necesita elget(index)
método tipo matriz ), tendría que inventar algo más complejo.fuente
keySet()
yvalues()
son vistas al originalMap
, por lo que cuando se modifican el respaldo tambiénMap
debe modificarse, su solución no es compatible con estoSe introdujo Java 14
List#copyOf
que devuelve la Lista no modificable mientras se conserva el orden:fuente
Aquí hay una solución subóptima como una línea:
fuente