Java Map String <liststring> looping </liststring>

时间:2014-07-01 08:24:43

标签: java loops map

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

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);
    }

知道我需要在Map

中添加值
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

像: 如果Map String(15)等于value1(15)     找到值为15的Map Liststring并将value2放在其中。

输出数据应如下所示:

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

任何人都知道如何循环或搜索位置或更正列表?

2 个答案:

答案 0 :(得分:0)

由于您要为地图中的所有值分配相同的列表,因此无需遍历条目集。您可以获取该值并替换所有内容,例如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);
    }
}

答案 1 :(得分:0)

首先,我猜这个List<String> newList = new ArrayList<String>();应该在你正在更新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);
}

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