303 votes

Java: Comment convertir une Liste de Carte

Récemment, j'ai une conversation avec un collègue à propos de ce qui serait la solution optimale pour convertir List de Map en Java et s'il ya des avantages spécifiques de le faire.

Je veux savoir une conversion optimale d'approche et de apprécierais vraiment si quelqu'un peut me guider.

Est-ce une bonne approche:

List<Object[]> results;
Map<Integer, String> resultsMap = new HashMap<Integer, String>();
  for (Object[] o : results) {
    resultsMap.put((Integer) o[0], (String) o[1]);
  }

Merci.

466voto

ZouZou Points 23600

Avec , vous serez en mesure de le faire à une ligne à l'aide d' streams, et l' Collectors classe.

Map<String, Item> map = list.stream()
                            .collect(Collectors.toMap(Item::getKey,
                                                      item -> item));

Courte démo :

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test{
    public static void main (String [] args){
        List<Item> list = Arrays.asList(new Item(1),
                                        new Item(2),
                                        new Item(3),
                                        new Item(4));
        Map<String, Item> map = list.stream()
                                    .collect(Collectors.toMap(Item::getKey,
                                                              item -> item));
        System.out.println(map);
    }
}
class Item {
    int i;
    public Item(int i){
        this.i = i;
    }
    public String getKey(){
        return "Key-"+i;
    }
    @Override
    public String toString() {
        return "Item [i=" + i + "]";
    }
}

Sortie :

{Key-1=Item [i=1], Key-2=Item [i=2], Key-3=Item [i=3], Key-4=Item [i=4]}

220voto

Jim Garrison Points 39523
List<Item> list;
Map<Key,Item> map = new HashMap<Key,Item>();
for (Item i : list) map.put(i.getKey(),i);

En supposant bien sûr que chaque Élément a un getKey() méthode qui retourne une clé du type approprié.

113voto

ripper234 Points 39314

Juste au cas où cette question n'est pas fermé comme un doublon, le droit de réponse est d'utiliser Google Collections:

Map<String,Role> mappedRoles = Maps.uniqueIndex(yourList, new Function<Role,String>() {
  public String apply(Role from) {
    return from.getName(); // or something else
  }});

10voto

Steve Kuo Points 15196

Un List et Map sont conceptuellement différentes. Un List est une collection ordonnée d'éléments. Les articles peuvent contenir des doublons, et un élément peut pas le concept d'un identifiant unique (clé). Un Map a des valeurs mappés à des touches. Chaque clé ne peut point à une valeur.

Donc, selon votre Lists'éléments, il peut ou peut ne pas être possible de le convertir en Map. Est-ce que votre Lists'articles n'ont pas de doublons? Est-ce que chaque élément ont une clé unique? Si oui, alors il est possible de les mettre dans un Map.

7voto

Jeremy Heiler Points 14320

Techniquement parlant, une liste est déjà une carte à la clé sur l'index de l'élément dans la liste.

Liste#get(int index)

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