it-roy-ru.com

Как я могу хранить HashMap <String, ArrayList <String >> внутри списка?

Мой hashmap хранит строку как ключ и arraylist как значения. Теперь мне нужно включить это в список. То есть он будет иметь следующую форму:

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

Вот декларации, которые я использовал:

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

Может кто-нибудь помочь мне, какой метод и как использовать в списке, чтобы продолжить сохранение моей карты в нем?

22
user2376600

Всегда старайтесь использовать интерфейсную ссылку в Collection , это добавляет больше гибкости.
В чем проблема с приведенным ниже кодом?

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.

Вы можете легко сделать это, как указано выше.

30
Shreyos Adikari

Во-первых, позвольте мне немного исправить ваше заявление:

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

Обратите внимание, что я использовал конкретный класс (HashMap) только один раз. Важно использовать интерфейс, где вы сможете изменить реализацию позже. 

Теперь вы хотите добавить элемент в список, не так ли? Но элемент является картой, поэтому вы должны создать его:

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

Теперь вы хотите заполнить карту. К счастью, вы можете использовать утилиту, которая создает списки для вас, в противном случае вы должны создать список отдельно:

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

Хорошо, теперь мы готовы добавить карту в список:

listOfMapOfList.add(mapOfList);

НО:

Прекратите создавать сложные коллекции прямо сейчас! Подумайте о будущем: вам, вероятно, придется изменить внутреннюю карту на что-то другое или установить список и т.д. Это, вероятно, заставит вас переписать важные части вашего кода. Вместо этого определите класс, содержащий ваши данные, а затем добавьте его в одномерную коллекцию:

Давайте назовем ваш класс Student (просто как пример):

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

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

    //constructors, getters, setters etc
}

Теперь вы можете определить простую коллекцию:

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

Если в будущем вы захотите поместить своих учеников в карту, где ключом является studentId, сделайте это:

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

Попробуйте следующее:

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

Если ваш список должен иметь тип List<HashMap<String, ArrayList<String>>>, тогда объявите переменную map как HashMap, а не Map.

3
Duncan Jones

Сначала вам нужно определить List как:

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

Чтобы добавить Map к List, используйте add (E e) метод:

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