2013-05-13 393 views
19

我的hashmap存储字符串作为键和arraylist作为值。现在,我需要将其嵌入到列表中。也就是说,这将是以下形式:如何将HashMap <String,ArrayList <String>>存储在列表中?

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

谁能帮助我这方法,以及如何在列表中用来进行存储我映射到它?

+0

您的意思是你需要一个这种形式的地图列表? – 2013-05-13 06:49:31

+0

我假设你正在使用java,并且你的大多数'('实际上应该是'<'。 – CodesInChaos 2013-05-13 06:52:04

+0

Yeah..its java ..既然'<'显示不正确,我用'(' – user2376600 2013-05-13 06:58:56

回答

28

总是尝试使用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. 

您可以轻松地做到这一点像上面。

2

尝试以下操作:

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

如果您的列表必须是List<HashMap<String, ArrayList<String>>>类型,然后声明您map变量作为HashMap而不是Map

1

首先,您需要定义List为:

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

要将Map添加到List,使用add(E e)方法:

list.add(map); 
+1

鉴于'map'和'list'的当前定义,这不起作用 – 2013-05-13 07:01:29

+1

我在此回退编辑由于缺少编辑的意见或作者的确认 – 2013-05-13 07:14:34

13

首先,让我解决一点点你的宣言:

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

OK,现在我们已经准备好地图添加到列表中:

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

好的答案,希望你不介意我调整了你的代码格式 – 2013-05-13 09:02:22

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

对这段代码的一些解释可能会有好处 – Pyves 2017-06-14 09:08:23

+0

是的,对于当然,事实是,我需要一个解决方案,以上可以清除它。通过下一篇文章,我将正确解释整个代码。 – James 2017-06-14 09:10:40

相关问题