【问题标题】:Adding new list dynamically to Map将新列表动态添加到地图
【发布时间】:2014-12-20 13:19:21
【问题描述】:

我有一个这样的数组 006247241 0590040100000124 0590020100000125 0590020450000124 006247242 0590040100000129 ...现在,如果数组中任何值的长度在 1 到 9 之间,它就成为一个键,而它后面的其余部分立即成为我使用 Map 的值。因此,在上述情况下,006247241 成为键,0590040100000124 0590020100000125 0590020450000124 成为该键的值,依此类推。我的代码是这样的(以上所有值都在一个数组cellValues[]中)。

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

            String key="#";

            for(int k=0;k<cellValues.length;k++){
                if(cellValues[k]!=null){
                    if(cellValues[k].length()<=9 && cellValues[k].length()>0 ){
                        map.put(key,list);
                        //System.out.println("MAP:"+map);
                        key=cellValues[k];
                    }else{
                        list.add(cellValues[k]);
                    }
                }
            }

我在这里面临的问题是如何为每个新键添加新列表。上面的代码只会将所有值附加到数组中的每个键,输出将是这样的

键 = 006247241 值 = [#, 0590040100000124,0590020100000125,0590020450000124, 0590040100000129

键 = 006247242 值 = [#, 0590040100000124,0590020100000125,0590020450000124, 0590040100000129

【问题讨论】:

  • 预期输出是什么?
  • 答案= 006247241值= [#,0590040100000124,0590020100000125,0590020450000124,0590040100000129答案= 006247242值= [#,0590040100000300,0590020100000325,0590020450000312,0590040100000229 跨度>
  • 每个键都有自己的列表。因此,每次在地图中放置一个键时,您还需要创建与该键一起的新列表。
  • @JBNizet 这就是我正在寻找的,但在上述情况下无法弄清楚如何做到这一点
  • 键是否应该在它们的列表中具有相同的值或者它们是分开的?

标签: java arrays arraylist hashmap


【解决方案1】:

您每次都在重复使用同一个列表。如果您想为每个 key 创建一个新列表,则应在每次将新的 key,value 对放入地图时创建它:

Map<String, List<String>> map = new HashMap<String, List<String>>();
String key="#";

for(String value : cellValues){
    if(value.length()<=9){
         // its a key
         key = value;  
         map.put(key, new ArrayList<String>());
    }else{
        // its a list value
        map.get(key).add(value);
    }
}

您不再需要声明一个列表,因为您为每个键都使用了一个新列表,并且在添加到列表时,您获取通过搜索从地图中对列表的引用最后一个键:map.get(key).add(value);

【讨论】:

  • @aaron c 就是这样......我只是没有添加新的 Aaraylist ..你让我很开心
【解决方案2】:

我相信这就是你所追求的。如果没有,请告诉我。

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

    String key="#";

    for(int k=0;k<cellValues.length;k++){
        if(cellValues[k]!=null){
            if(cellValues[k].length()<=9 && cellValues[k].length()>0 ){
                key=cellValues[k];
                map.put(key, new ArrayList<String>());
            }else{
                if(!map.get(key).contains("#")){
                    map.get(key).add("#");
                }
                map.get(key).add(cellValues[k]);
            }
        }
    }
    for(String k : map.keySet()){
        System.out.println("Key = " + k + " Values = " + map.get(k).toString());
    }
}

【讨论】:

  • 就是这样......我只是没有添加新的 Aaraylist ..你让我很开心
  • 没问题。如果这解决了您的问题,请接受它,以便其他人知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2019-04-18
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多