web-dev-qa-db-fra.com

Comment puis-je stocker HashMap <String, ArrayList <String >> dans une liste?

Mon hashmap stocke la chaîne en tant que clé et arraylist en tant que valeurs. Maintenant, je dois intégrer cela dans une liste. C'est-à-dire qu'il se présentera sous la forme suivante:

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

Ce sont les déclarations que j'ai utilisées:

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

Est-ce que quelqu'un peut m'aider quelle méthode et comment utiliser dans la liste pour y stocker ma carte?

22
user2376600

Essayez toujours d'utiliser la référence d'interface dans Collection , cela ajoute davantage de flexibilité.
Quel est le problème avec le code ci-dessous?

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.

Vous pouvez facilement le faire comme ci-dessus.

30
Shreyos Adikari

Tout d’abord, permettez-moi de corriger un peu votre déclaration:

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

S'il vous plaît faites attention que j'ai utilisé classe concrète (HashMap) une seule fois. Il est important d’utiliser une interface permettant de modifier l’implémentation ultérieurement. 

Maintenant, vous voulez ajouter un élément à la liste, n'est-ce pas? Mais l'élément est une carte, vous devez donc le créer:

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

Maintenant, vous voulez remplir la carte. Heureusement, vous pouvez utiliser un utilitaire qui crée des listes pour vous, sinon vous devez créer des listes séparément:

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

OK, nous sommes maintenant prêts à ajouter la carte à la liste:

listOfMapOfList.add(mapOfList);

MAIS:

Arrêtez de créer des collections compliquées maintenant! Pensez au futur: vous devrez probablement changer la carte interne en un autre élément ou une liste à définir, etc. Cela vous obligera probablement à réécrire des parties importantes de votre code. Définissez plutôt la classe qui contient vos données, puis ajoutez-la à une collection à une dimension:

Appelons votre classe Student (juste à titre d'exemple):

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

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

    //constructors, getters, setters etc
}

Vous pouvez maintenant définir une collection simple:

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

Si, à l'avenir, vous voulez placer vos élèves dans une carte où la clé est studentId, procédez comme suit:

Map<Integer, Student> students = new HashMap<Integer, Student>();
15
AlexR

Essayez ce qui suit:

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

Si votre liste doit être de type List<HashMap<String, ArrayList<String>>>, déclarez votre variable map en tant que HashMap et non pas Map.

3
Duncan Jones

Tout d’abord, vous devez définir la List comme:

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

Pour ajouter la Map à la List, utilisez add (E e) method:

list.add(map);
2
NINCOMPOOP
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
James