Domanda

Qual è il modo migliore per convertire un Map<key,value> in List<value>? Basta scorrere tutti i valori e inserirli in un elenco o sto trascurando qualcosa?

È stato utile?

Soluzione

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

assumendo:

Map<Key,Value> map;

Altri suggerimenti

Il problema qui è che Map ha due valori (una chiave e un valore), mentre a List ha solo un valore (un elemento).

Pertanto, il meglio che si può fare è ottenere ArrayList delle chiavi o dei valori. (A meno che non creiamo un wrapper per aggrapparci alla coppia chiave / valore).

Supponiamo che abbiamo un Set:

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

Le chiavi come Map.keySet possono essere ottenute creando un nuovo Collection da un Map.values restituito da <=> metodo:

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

Mentre i valori come <=> possono essere ottenuti creando un nuovo <=> da un <=> restituito da <=> metodo:

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

Il risultato di ottenere il <=> di chiavi:

Apple
Another
Hello

Il risultato di ottenere il <=> di valori:

3.14
Element
World

Uso dell'API Java 8 Streams.

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

map.entrySet() ti offre una raccolta di Map.Entry oggetti contenenti sia chiave che valore. puoi quindi trasformarlo in qualsiasi oggetto di raccolta che ti piace, come new ArrayList(map.entrySet());

un elenco di cosa?

Supponendo che map sia la tua istanza di Map

  • map.values() restituirà un Collection contenente tutti i valori della mappa.
  • map.keySet() restituirà un Set contenente tutte le chiavi della mappa.

Suppongo che desideri convertire i valori contenuti in Map in list? Il più semplice è chiamare il metodo values() dell'interfaccia Collection. Ciò restituirà il List di oggetti valore contenuti in ArrayList.

Nota che questo <=> è supportato dall'oggetto <=> e che qualsiasi modifica all'oggetto <=> si rifletterà qui. Quindi, se vuoi una copia separata non legata al tuo <=> oggetto, crea semplicemente un nuovo <=> oggetto come un <=> che passa il valore <=> come di seguito.

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

Puoi farlo in questo modo

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

Se vuoi assicurarti che i valori nel risultante List<Value> siano nell'ordinamento chiave dell'input Map<Key, Value>, devi " passare attraverso " SortedMap in qualche modo.

inizia con un'implementazione TreeMap concreta (come Map) o inserisci il tuo input List in Hashtable prima di convertirlo in ConcurrentHashMap. per esempio:.

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

Altrimenti otterrai qualsiasi ordinamento nativo fornito dall'implementazione <=>, che spesso può essere qualcosa di diverso dall'ordinamento naturale delle chiavi (prova <=> o <=>, per varietà).

    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);

possiamo avere sia coppia chiave che valore nell'elenco. Inoltre possiamo ottenere chiave e valore usando Map.Entry ripetendo l'elenco.

// you can use this
List<Value> list = new ArrayList<Value>(map.values());

// or you may use 
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());    
}
"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());
 } "

Ecco il metodo generico per ottenere valori dalla mappa.

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;
}
HashMap<Integer, List<String>> map = new HashMap<>(); 
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
    return new ArrayList<String>((Collection<? extends String>) map.values());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top