Estou usando TreeBidiMap
da biblioteca Apache Collections . Eu quero classificar isso nos valores que são doubles
.
Meu método é recuperar um Collection
dos valores usando:
Collection coll = themap.values();
O que naturalmente funciona bem.
Pergunta principal: Agora quero saber como posso converter / converter (não tenho certeza qual é o correto) coll
em um List
para que possa ser classificado?
Pretendo, então, iterar sobre o List
objeto classificado , que deve estar em ordem e obter as chaves apropriadas de TreeBidiMap
( themap
) usando themap.getKey(iterator.next())
onde o iterador estará sobre a lista de doubles
.
TreeBidiMap
é umOrderedMap
, o pedido deve estar ok. A classificação necessária na pergunta é sobre valores, não sobre chaves.Respostas:
Como Erel Segal Halevi diz abaixo, se coll já é uma lista, você pode pular a etapa um. Mas isso dependeria dos elementos internos do TreeBidiMap.
fonte
Algo assim deve funcionar, chamando o construtor ArrayList que usa uma Collection:
fonte
Eu acho que a resposta de Paul Tomblin pode ser um desperdício caso coll já seja uma lista, porque criará uma nova lista e copiará todos os elementos. Se coll contém muitos elementos, isso pode levar um longo tempo.
Minha sugestão é:
fonte
Eu acredito que você pode escrever assim:
fonte
fonte
@Kunigami: Eu acho que você pode estar enganado sobre o
newArrayList
método da Goiaba . Ele não verifica se o Iterable é um tipo de Lista e simplesmente retorna a Lista como está. Ele sempre cria uma nova lista:fonte
O que você solicita é uma operação bastante confortável, verifique se você não precisa fazer isso com frequência (por exemplo, em um ciclo).
Caso contrário, você pode criar uma coleção personalizada. Eu vim com um que tem o seu
TreeBidiMap
eTreeMultiset
sob o capô. Implemente apenas o que você precisa e se preocupa com a integridade dos dados.Dessa forma, você retornou uma classificação
Multiset
devalues()
. No entanto, se você precisar que seja uma lista (por exemplo, você precisa doget(index)
método de matriz ), teria que inventar algo mais complexo.fonte
keySet()
evalues()
são vistas para o originalMap
, portanto, quando elas são modificadas, o apoio tambémMap
precisa ser modificado, sua solução não suporta issoAqui está uma solução abaixo do ideal como uma linha:
fonte