jdk 1.6时候,list删除值容易出错,就是直接使用:
list.remove(i);
所以要使用迭代器:
ArrayList<String> strList = Lists.newArrayList("a","b","c");
Iterator<String> iterator = strList.iterator();
while (iterator.hasNext()){
String i = iterator.next();
if(i.equals("c")){
iterator.remove();
}
}
System.out.println(strList);
输出:a,b
如果jdk 8之后。使用新的方法会更灵活,单个值可以使用:
removeIf
多个值也可以使用:stream表达式的filter:
public static void main(String[] args) {
List<Department> list = new ArrayList<>();
for(int i=0;i<7;i++) {
Department depart = new Department();
depart.setDepartCode("code_"+i);
depart.setId(i );
depart.setName("测试_"+i);
list.add(depart);
}
System.out.println("init:"+JSON.toJSONString(list));
//to dellist
List<String> removdeList = new ArrayList<>();
removdeList.add("code_3");
removdeList.add("code_4");
removdeList.add("code_5");
list = list.stream().filter(dep->!removdeList.contains(dep.getDepartCode() ) ).collect(Collectors.toList()) ;
System.out.println("after delete:"+JSON.toJSON( list) );
}
init:[{"departCode":"code_0","id":0,"name":"测试_0"},{"departCode":"code_1","id":1,"name":"测试_1"},{"departCode":"code_2","id":2,"name":"测试_2"},{"departCode":"code_3","id":3,"name":"测试_3"},{"departCode":"code_4","id":4,"name":"测试_4"},{"departCode":"code_5","id":5,"name":"测试_5"},{"departCode":"code_6","id":6,"name":"测试_6"}]
after delete:[{"name":"测试_0","departCode":"code_0","id":0},{"name":"测试_1","departCode":"code_1","id":1},{"name":"测试_2","departCode":"code_2","id":2},{"name":"测试_6","departCode":"code_6","id":6}]
filter除了单个的判断外,项这种:
list= list.stream().filter(l -> l != num).collect(Collectors.toList());
还可以上面那种的使用list去除多个。