我正在尝试使用代码循环地图:
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]
任何人都知道如何循环或搜索位置或更正列表?
答案 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);
}
我没有检查过代码,但你明白了。