Come convertire una mappa in elenco in Java?
-
06-07-2019 - |
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?
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à unCollection
contenente tutti i valori della mappa. -
map.keySet()
restituirà unSet
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());
}