Map<String, Boolean> map = new HashMap<>();
map.put("0", true);
map.put("1", true);
map.put("2", true);
map.put("3", false);
List<String> list = new ArrayList<>();
list.add("红色");
list.add("蓝色");
list.add("绿色");
list.add("紫色");
Map里面键 对应这 list里面的下标 true的时候让list里面对应的下标删除 怎么 写啊 求求大神救救我吧 我都纠结两天了
看看我的代码有没有解决你的问题。
public static void main(String[] args) {
Map<String, Boolean> map = new HashMap<String, Boolean>();
map.put("0", true);
map.put("1", true);
map.put("2", true);
map.put("3", false);
List<String> list = new ArrayList<String>();
list.add("红色");
list.add("蓝色");
list.add("绿色");
list.add("紫色");
List<String> list1 = new ArrayList<String>();
Map<String, String> map1 = new HashMap<String, String>();
for(int i=0;i<map.size();i++){
if(map.get(i+"")){
map1.put(""+i, ""+i);
list1.add(list.get(i));
}
};
list.removeAll(list1);
for(int i=0;i<map1.size();i++){
map.remove(map1.get(""+i));
}
System.err.println(map.toString());
System.err.println(list.toString());
}
你这样设计是不合理的如果map的键对应list的下标,那么list.remove()方法会让list的size()减小,这样第一次删除list里面一个数据之后list.size()就会-1,这样map中的键和list的下标就不能一一对应了
可以考虑用list集合存放boolen值当值是true时两个list集合一起删除就可以防止楼上说的那种情况
或者是在list集合内放置map就一起解决了
for(int i=0;i<list.size();i++){
if(map.containsKey(i+"") && StringUtils.equals(map.get(i+"").toString(), "true")){
list.remove(i);
}
}
for(String s:list){
System.out.println(s);
}
新添加到一个list 不就好了 原本不动
List list1 = new ArrayList<>();
for(int i=0;i<list.size();i++){
if(map.containsKey(i+"") && StringUtils.equals(map.get(i+"").toString(), "false")){
list1.add(list.get(i));
}
}
for(String s:list1){
System.out.println(s);
}
如果你非要那么倔强的话 你这么干
int listSize = list.size();
int len = 0;
for(int i=0;i<listSize;i++){
if(map.containsKey(i+"") && "true".equals(map.get(i+"").toString())){
list.remove(i-len);
len++;
}
}
System.out.println(list);
把map设置的key值与list添加的值一样
map.get(map.containsKey(list.get(i)))==true 就删除
倒序遍历list即可解决问题