首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将List<Object[]>转换为HashMap<Integer,List<String>>可以是最优的方法吗?

将List<Object[]>转换为HashMap<Integer,List<String>>可以是最优的方法吗?
EN

Stack Overflow用户
提问于 2013-12-05 19:17:00
回答 4查看 1.7K关注 0票数 0

我有List<Object[]> say li的项目,比如

代码语言:javascript
运行
复制
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>>类型,什么是最优的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-05 19:24:17

下面是一系列可以帮助您实现这一目标的步骤。

  1. 遍历列表。
  2. 对于每个元素,检查Object[0]是否已经存在于映射中。 如果存在,则获取该密钥的List<String>并将Object[1]添加到其中。 如果没有,那么创建一个新的List<String>,向它添加一个Object[1],并向地图中添加一个条目,其中Object[0]作为键,新创建的列表中添加Object[1]作为值。
  3. 继续这样做,直到列表结束。

注意:在必要的地方,您需要将Object[0]转换为IntegerObject[1],作为String

票数 3
EN

Stack Overflow用户

发布于 2013-12-05 19:36:30

如果要避免映射中的值列表中的重复值,则使用HashSet代替列表。

用HashSet

代码语言:javascript
运行
复制
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);

使用列表

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2013-12-05 19:21:38

我会使用性能更好的SparseArray<ArrayList<String>>。实际上,您的IDE (eclipse )可能会建议您将HashMap<Integer,List<String>>更改为SparseArray

代码语言:javascript
运行
复制
     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);

       }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20408636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档