我有List<Object[]>
say li的项目,比如
li.add(new Object[]{1,"Orange"})
li.add(new Object[]{1,"Apple"})
li.add(new Object[]{1,"Orange"})
li.add(new Object[]{2,"Guava"})
li.add(new Object[]{3,"Apple"})
li.add(new Object[]{3,"Grapes"})
也就是说,一个整数可以是多个times.Now,我必须将这个列表转换为HashMap HashMap<Integer,List<String>>
类型,什么是最优的方法?
发布于 2013-12-05 19:24:17
下面是一系列可以帮助您实现这一目标的步骤。
Object[0]
是否已经存在于映射中。
如果存在,则获取该密钥的List<String>
并将Object[1]
添加到其中。
如果没有,那么创建一个新的List<String>
,向它添加一个Object[1]
,并向地图中添加一个条目,其中Object[0]
作为键,新创建的列表中添加Object[1]
作为值。注意:在必要的地方,您需要将Object[0]
转换为Integer
和Object[1]
,作为String
。
发布于 2013-12-05 19:36:30
如果要避免映射中的值列表中的重复值,则使用HashSet代替列表。
用HashSet
HashMap<Integer, HashSet<String>> map =new HashMap<Integer, HashSet<String>>();
for (Object[] objects : lst) {
HashSet<String> valueSet;
if(map.containsKey((Integer)objects[0])){
valueSet = map.get((Integer)objects[0]);
}
else{
valueSet = new HashSet<String>();
map.put((Integer)objects[0],valueSet);
}
valueSet.add((String)objects[1]);
}
System.out.println(map);
使用列表
HashMap<Integer, List<String>> map =new HashMap<Integer, List<String>>();
for (Object[] objects : lst) {
List<String> valueList;
if(map.containsKey((Integer)objects[0])){
valueList = map.get((Integer)objects[0]);
}
else{
valueList = new ArrayList<String>();
map.put((Integer)objects[0],valueList);
}
valueList.add((String)objects[1]);
}
System.out.println(map);
发布于 2013-12-05 19:21:38
我会使用性能更好的SparseArray<ArrayList<String>>
。实际上,您的IDE (eclipse )可能会建议您将HashMap<Integer,List<String>>
更改为SparseArray
SparseArray<ArrayList<String>> list;
for (Object[] objects : yourlist) {
Integer number=((Integer) objects[0]);
String value=((String) objects[1]);
if (list.get(number) == null) {
ArrayList<String> temp= new ArrayList<String>();
temp.put(value);
list.append(number, temp);
}
else list.get(number).put(value);
}
https://stackoverflow.com/questions/20408636
复制相似问题