objects - map to set java




Como converter um mapa em lista em Java? (9)

Qual é a melhor maneira de converter um Map<key,value> em um List<value> ? Basta iterar sobre todos os valores e inseri-los em uma lista ou estou com alguma coisa?


A questão aqui é que o Map tem dois valores (uma chave e um valor), enquanto uma List tem apenas um valor (um elemento).

Portanto, o melhor que pode ser feito é obter uma List das chaves ou dos valores. (A menos que façamos um wrapper para segurar o par chave / valor).

Digamos que temos um Map :

Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");

As chaves como uma List podem ser obtidas criando uma nova ArrayList de um Set retornado pelo método Map.keySet :

List<String> list = new ArrayList<String>(m.keySet());

Enquanto os valores como uma List podem ser obtidos criando uma nova ArrayList de uma Collection retornada pelo método Map.values :

List<String> list = new ArrayList<String>(m.values());

O resultado de obter a List de chaves:

Apple
Another
Hello

O resultado de obter a List de valores:

3.14
Element
World

Aqui está o método genérico para obter valores do mapa.

public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
    List<T> thingList = new ArrayList<>();

    for (Map.Entry<String, T> entry : map.entrySet()) {
        thingList.add(entry.getValue());
    }

    return thingList;
}

Se você quiser garantir que os valores na List<Value> resultante List<Value> estejam na ordenação de chaves do Map<Key, Value> entrada Map<Key, Value> , você precisará "percorrer" o SortedMap alguma forma.

Comece com uma implementação concreta de SortedMap (como TreeMap ) ou insira seu Map entrada em um SortedMap antes de convertê-lo em List . por exemplo:

Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));

Caso contrário, você obterá qualquer ordenação nativa que a implementação do Map forneça, que muitas vezes pode ser algo diferente da ordenação natural de chaves (Experimente Hashtable ou ConcurrentHashMap , para variar).


Usando a API do Java 8 Streams.

List<Value> values = map.values().stream().collect(Collectors.toList());

uma lista de quê?

Supondo que o map é a sua instância do Map

  • map.values() retornará uma Collection contendo todos os valores do mapa.
  • map.keySet() retornará um Set contendo todas as chaves do mapa.

map.entrySet() fornece uma coleção de objetos Map.Entry contendo chave e valor. você pode então transformar isso em qualquer objeto de coleção que desejar, como o new ArrayList(map.entrySet()) ;


    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("java", 20);
    map.put("C++", 45);

    Set <Entry<String, Integer>> set = map.entrySet();

    List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);

Podemos ter tanto chave e valor par na lista. Também pode obter chave e valor usando Map.Entry por iterar sobre a lista.


"Map<String , String > map = new HapshMap<String , String>;
 map.add("one","java");
 map.add("two" ,"spring");
 Set<Entry<String,String>> set =  map.entrySet();
 List<Entry<String , String>> list = new ArrayList<Entry<String , String>>    (set);
 for(Entry<String , String> entry : list ) {
   System.out.println(entry.getKey());
   System.out.println(entry.getValue());
 } "

List<Value> list = new ArrayList<Value>(map.values());

assumindo:

Map<Key,Value> map;




map