从hashmap存储和检索ArrayList值

我有一个以下类型的hashmap

HashMap<String,ArrayList> map=new HashMap<String,ArrayList>(); 

存储的值如下:

 mango | 0,4,8,9,12 apple | 2,3 grapes| 1,7 peach | 5,6,11 

我想存储以及使用Iterator或任何其他方式使用最少的代码行获取那些整数。我该怎么办?

编辑1

当密钥与适当的行匹配时,数字是随机添加的(不是一起)。

编辑2

添加时如何指向arraylist?

我在行map.put(string,number);添加一个新的数字18时遇到错误map.put(string,number);

我们的变量:

 Map> map = new HashMap>(); 

储藏:

 map.put("mango", new ArrayList(Arrays.asList(0, 4, 8, 9, 12))); 

要添加数字1和1,您可以执行以下操作:

 String key = "mango"; int number = 42; if (map.get(key) == null) { map.put(key, new ArrayList()); } map.get(key).add(number); 

在Java 8中,如果列表已经不存在,您可以使用putIfAbsent添加列表:

 map.putIfAbsent(key, new ArrayList()); map.get(key).add(number); 

使用map.entrySet()方法迭代:

 for (Entry> ee : map.entrySet()) { String key = ee.getKey(); List values = ee.getValue(); // TODO: Do something. } 

你可以这样使用(虽然随机数生成器逻辑不符合标记)

 public class WorkSheet { HashMap> map = new HashMap>(); public static void main(String args[]) { WorkSheet test = new WorkSheet(); test.inputData("mango", 5); test.inputData("apple", 2); test.inputData("grapes", 2); test.inputData("peach", 3); test.displayData(); } public void displayData(){ for (Entry> entry : map.entrySet()) { System.out.print(entry.getKey()+" | "); for(int fruitNo : entry.getValue()){ System.out.print(fruitNo+" "); } System.out.println(); } } public void inputData(String name ,int number) { Random rndData = new Random(); ArrayList fruit = new ArrayList(); for(int i=0 ; i 

OUTPUT

 grapes | 7 5 apple | 9 5 peach | 5 5 8 mango | 4 7 1 5 5 
 Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry)it.next(); if(pairs.getKey().equals("mango")) { map.put(pairs.getKey(), pairs.getValue().add(18)); } else if(!map.containsKey("mango")) { List ints = new ArrayList(); ints.add(18); map.put("mango",ints); } it.remove(); // avoids a ConcurrentModificationException } 

编辑:所以在里面尝试这个:

 map.put(pairs.getKey(), pairs.getValue().add(number)) 

您收到错误是因为您试图将一个整数放到值中,而它是一个ArrayList

编辑2:然后将以下内容放入while循环中:

 if(pairs.getKey().equals("mango")) { map.put(pairs.getKey(), pairs.getValue().add(18)); } else if(!map.containsKey("mango")) { List ints = new ArrayList(); ints.add(18); map.put("mango",ints); } 

编辑3:通过阅读您的要求,我认为您可能不需要循环。 您可能只想检查地图是否包含关键mango ,如果它确实添加了18 ,否则在地图中使用关键mango和值18创建一个新条目。

所以你可能需要的是以下内容,没有循环:

 if(map.containsKey("mango")) { map.put("mango", map.get("mango).add(18)); } else { List ints = new ArrayList(); ints.add(18); map.put("mango", ints); } 
 for (Map.Entry> entry : map.entrySet()) { System.out.println( entry.getKey()); System.out.println( entry.getValue());//Returns the list of values } 

一次取所有=

 List list = null; if(map!= null) { list = new ArrayList(map.values()); } 

对于存储=

 if(map!= null) { list = map.get(keyString); if(list == null) { list = new ArrayList(); } list.add(value); map.put(keyString,list); } 

您可以尝试使用MultiMap而不是HashMap

初始化它将需要更少的代码行。 添加和检索值也会缩短它。

 Map> map = new HashMap>(); 

会成为:

 Multimap multiMap = ArrayListMultimap.create(); 

您可以查看以下链接: http : //java.dzone.com/articles/hashmap-%E2%80%93-single-key-and