Qual é a melhor maneira de converter um Map<key,value>
para um List<value>
? Basta iterar sobre todos os valores e inseri-los em uma lista ou estou ignorando alguma coisa?
java
list
collections
map
Javaa
fonte
fonte
Respostas:
assumindo:
fonte
Collection
paraList
iria funcionar.keySet()
evalues()
geralmente são objetos de calço que fornecem uma visualização de conjunto ou coleção da estrutura subjacente (keySet()
retorna um conjunto para enfatizar não enganos). Poisvalues()
, o objeto retornado pode ser umList
, mas geralmente não será. Criar uma lista real, como você diz, quebra o link, o que significa que você não depende mais do mapa original. Às vezes, porém, você só precisa de uma lista, porque alguns API requer um - reforçando a regra de que uma boa API deve exigir apenas as interfaces mais abstratos que podem fugir com ...O problema aqui é que
Map
possui dois valores (uma chave e um valor), enquanto umList
possui apenas um valor (um elemento).Portanto, o melhor que pode ser feito é obter uma
List
das chaves ou os valores. (A menos que façamos um invólucro para manter o par de chave / valor).Digamos que temos um
Map
:As chaves como a
List
podem ser obtidas criando um novoArrayList
de umSet
retornado peloMap.keySet
método:Enquanto os valores como a
List
podem ser obtidos, crie um novoArrayList
de umCollection
retornado peloMap.values
método:O resultado de obter as
List
chaves:O resultado da obtenção
List
dos valores:fonte
HashMap
classificadas semelhantesMap
, será efetivamente aleatória.Usando a API Java 8 Streams.
fonte
map.entrySet()
fornece uma coleção deMap.Entry
objetos contendo chave e valor. você pode transformar isso em qualquer objeto de coleção que desejar, comonew ArrayList(map.entrySet())
;fonte
uma lista do que?
Supondo que
map
seja sua instância deMap
map.values()
retornará umCollection
contendo todos os valores do mapa.map.keySet()
retornará umSet
contendo todas as chaves do mapa.fonte
Eu acho que você deseja converter os valores contidos no
Map
para alist
? O mais fácil é chamar ovalues()
método daMap
interface. Isso retornará osCollection
objetos de valor contidos noMap
.Observe que isso
Collection
é apoiado peloMap
objeto e quaisquer alterações noMap
objeto serão refletidas aqui. Portanto, se você deseja que uma cópia separada não esteja vinculada ao seuMap
objeto, basta criar um novoList
objeto, comoArrayList
passar o valorCollection
abaixo.fonte
Você pode fazer assim
fonte
Se você deseja garantir que os valores no resultante
List<Value>
estejam na ordem das chaves da entradaMap<Key, Value>
, é necessário "continuar"SortedMap
alguma forma.Ou começar com um concreto
SortedMap
de implementação (tais comoTreeMap
) ou inserir sua entradaMap
em umSortedMap
antes de converter isso paraList
. por exemplo:Caso contrário, você receberá qualquer ordem nativa
Map
fornecida pela implementação, que geralmente pode ser algo diferente da ordem da chave natural (tenteHashtable
ouConcurrentHashMap
, para variar).fonte
podemos ter o par de chave e valor na lista. Também podemos obter chave e valor usando Map.Entry iterando a lista.
fonte
fonte
fonte
Aqui está o método genérico para obter valores do mapa.
fonte
fonte