【问题标题】:Java Map String <ListString> loopingJava Map String <ListString> 循环
【发布时间】:2014-07-01 08:24:42
【问题描述】:

我正在尝试使用代码循环地图:

Map<String, List<String>> newMap = new HashMap<String, List<String>>();
List<String> newList = new ArrayList<String>();

在地图上分配一些默认值

    for ( int m = 1; m < attribteList.size(); m = m+2) {
        String newName = newList.get(m);
        newMap.put(newName , newList);
    }

知道我需要在地图中添加值

for (another loop) {
    String value1 = anyvalue;
    String value2 = anyvalue;

    Iterator it = pmMap.entrySet().iterator();
    int cnt = 1;
    while (it.hasNext()) {
        Map.Entry pairs = (Map.Entry)it.next();

        if(value1.equalsIgnoreCase(pairs.getKey().toString())) {
            for (List<String> list : pmMap.values()) {
                int a = list.indexOf(list);
                if (a == cnt) {
                    list.add(value2);   
                }
            }
        }
    cnt++;
    }

问题是我的循环不起作用。我需要根据地图中的位置或值从地图中添加 value2

喜欢: 如果映射字符串 (15) 等于 value1 (15) 找到值为 15 的 Map Liststring 并将 value2 放入其中。

输出数据应该是这样的:

MAP: 15=[value2, 0, 0, 0] 16=[value2, 0, 0, 0, 0]  17=[value2, 0, ,0 ,0]

有人知道如何循环或搜索位置或正确列表吗?

【问题讨论】:

  • 这里的pmMap 是什么?
  • 这应该是什么? int a = list.indexOf(list); 列表本身的索引?
  • 看来你是puting 相同的列表到地图的每个键......这段代码到底应该做什么? list.indexOf(list) 是什么?

标签: java loops map


【解决方案1】:

首先,我猜这个List&lt;String&gt; newList = new ArrayList&lt;String&gt;(); 应该在你更新HashMap 的循环内,否则@tobias_k 提到你向每个键插入相同的值。我猜你不想那样。

您可以使用keySet() 获取您的Map 的密钥并在其中循环:

Set<String> set = pmMap.keySet();
for(String key : set) {
ArrayList<String> list = null;
if(value1.equals(key)) {
list = pmMap.get(key);
list.add(value2);
pmMap.put(key, list);
}

我没有检查代码,但你明白了。

【讨论】:

    【解决方案2】:

    由于您将相同的列表分配给映射中的所有值,因此您无需遍历条目集。您可以获取该值并进行替换,例如Collections.replaceAll(list, value1, value2);

    List<String> list = pmMap.get(value1);
    if(list != null){
        Collections.replaceAll(list, value1, value2);
    }
    

    一个样本

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class Test {     
        public static void main(String[] args) {
            Map<String, List<String>> pmMap = new HashMap<String, List<String>>();
            List<String> newList = new ArrayList<String>(){{ add("15"); add("16"); add("17"); add("18");}};
    
            for (int m = 0; m < newList.size(); m++) {
                String newName = newList.get(m);
                pmMap.put(newName , newList);
            }
    
            System.out.println(pmMap);
    
            String value1 = "15";
            String value2 = "19";
    
            List<String> list = pmMap.get(value1);
            if(list != null){
                Collections.replaceAll(list, value1, value2);
            }
    
            System.out.println(pmMap);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2020-01-26
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 2020-03-17
      相关资源
      最近更新 更多