2013-05-13 10 views
19

La mia hashmap memorizza la stringa come chiave e arraylist come valori. Ora, ho bisogno di incorporarlo in una lista. Cioè, sarà il seguente formato:Come posso memorizzare HashMap <String, ArrayList <String>> all'interno di un elenco?

List<HashMap<String, ArrayList<String>>> 

Queste sono le dichiarazioni che ho usato:

Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>(); 
ArrayList<String> arraylist = new ArrayList<String>(); 
map.put(key,arraylist); 
List<String> list = new ArrayList<String>(); 

qualcuno mi può aiutare quale metodo e come utilizzare nella lista per proseguire l'archiviazione mia mappare in esso?

+0

vuoi dire che hai bisogno di un elenco di mappe di questo modulo? –

+0

Presumo che tu stia usando java e che la maggior parte dei tuoi '(' dovrebbe essere ''. ' – CodesInChaos

+0

Sì..its java .. Poiché' <'non è stato visualizzato correttamente, ho usato' (' – user2376600

risposta

28

Provare sempre a utilizzare il riferimento all'interfaccia nella raccolta, questo aggiunge maggiore flessibilità.
Qual è il problema con il codice qui sotto?

List<Map<String,List<String>>> list = new ArrayList<Map<String,List<String>>>();//This is the final list you need 
Map<String, List<String>> map1 = new HashMap<String, List<String>>();//This is one instance of the map you want to store in the above list. 
List<String> arraylist1 = new ArrayList<String>(); 
arraylist1.add("Text1");//And so on.. 
map1.put("key1",arraylist1); 
//And so on... 
list.add(map1);//In this way you can add. 

potete facilmente può farlo come sopra.

2

provare quanto segue:

List<Map<String, ArrayList<String>>> mapList = 
    new ArrayList<Map<String, ArrayList<String>>>(); 
mapList.add(map); 

Se l'elenco deve essere di tipo List<HashMap<String, ArrayList<String>>>, quindi dichiarare la variabile map come HashMap e non un Map.

1

Prima di tutto bisogna definire la List come:

List<Map<String, ArrayList<String>>> list = new ArrayList<>(); 

Per aggiungere la Map al List, utilizzare add(E e) metodo:

list.add(map); 
+1

Questo non funzionerà dato le attuali definizioni di 'map' e' list'. –

+1

Ho ripristinato la modifica su questo post, a causa della mancanza di commenti da parte dell'editore o del riconoscimento dell'autore –

13

In primo luogo, mi permetta di risolvere un po 'la sua dichiarazione:

List<Map<String, List<String>>> listOfMapOfList = 
    new HashList<Map<String, List<String>>>(); 

Si prega di fare attenzione che ho usato la classe di calcestruzzo (HashMap) solo una volta. È importante utilizzare l'interfaccia in cui è possibile essere in grado di modificare l'implementazione in un secondo momento.

Ora si desidera aggiungere un elemento all'elenco, non è vero? Ma l'elemento è una mappa, in modo da avere per crearlo:

Map<String, List<String>> mapOfList = new HashMap<String, List<String>>(); 

Ora si desidera popolare la mappa. Fortunatamente è possibile utilizzare utility che crea liste per voi, altrimenti si deve creare lista separatamente:

mapOfList.put("mykey", Arrays.asList("one", "two", "three")); 

OK, ora siamo pronti per aggiungere la mappa nella lista:

listOfMapOfList.add(mapOfList); 

MA:

Smettere di creare raccolte complicate in questo momento! Pensa al futuro: probabilmente dovrai cambiare la mappa interna in qualcos'altro o elencare per impostare ecc. Questo probabilmente ti farà riscrivere parti significative del tuo codice.Invece di definire classe che contiene i propri dati e quindi aggiungere a uno-dimensionale collezione:

Chiamiamo la classe Student (come esempio):

public Student { 
    private String firstName; 
    private String lastName; 
    private int studentId; 

    private Colectiuon<String> courseworks = Collections.emtpyList(); 

    //constructors, getters, setters etc 
} 

Ora è possibile definire semplice raccolta:

Collection<Student> students = new ArrayList<Student>(); 

Se in futuro si desidera mettere gli studenti in mappa dove è la chiave studentId, farlo:

Map<Integer, Student> students = new HashMap<Integer, Student>(); 
+0

Bella risposta, spero non ti dispiaccia Ho regolato la formattazione del codice –

0
class Student{ 
    //instance variable or data members. 

    Map<Integer, List<Object>> mapp = new HashMap<Integer, List<Object>>(); 
    Scanner s1 = new Scanner(System.in); 
    String name = s1.nextLine(); 
    int regno ; 
    int mark1; 
    int mark2; 
    int total; 
    List<Object> list = new ArrayList<Object>(); 
    mapp.put(regno,list); //what wrong in this part? 
    list.add(mark1); 
    list.add(mark2);** 
    //String mark2=mapp.get(regno)[2]; 
} 
+0

Alcune spiegazioni su questo pezzo di codice potrebbero essere utili – Pyves

+0

Sì, per certo è che ho bisogno di una soluzione per quanto sopra potrebbe cancellarlo. Entro il prossimo post spiegherò correttamente l'intero codice. – James