JAVA 使用List中的remove方法遇到的坑
一、问题描述
有个需求是从List过滤掉金额小于0.01的数据,看起来很简单,我却搞了半天,没次数据都没删除干净,都会有四五条没删除。。
二、解决方法
测试了半天,发现for循环写错了,刚开始是这样写的:
for (int i = 0; i < psychoLogistResponseList.size(); i++) {
double Graphicprice = Double.parseDouble(psychoLogistResponseList.get(i).getGraphicprice());//图文价格
double Speechprice = Double.parseDouble(psychoLogistResponseList.get(i).getSpeechprice());//语音价格
double Videoprice = Double.parseDouble(psychoLogistResponseList.get(i).getVideoprice());//视频价格
if(1<=Graphicprice||1<=Speechprice||1<=Videoprice){
psychoLogistResponseList.remove(i);
}
debug调试,发现执行前几次没错,到了最后几次,就会漏一些数据。。。在网上找了下,以下才是正确的写法:
/*
* 正确
*/
public static void remove14(List<String> list, String target){
for(int i = list.size() - 1; i >= 0; i--){
String item = list.get(i);
if(target.equals(item)){
list.remove(item);
}
}
print(list);
}
/*
* 正确
*/
public static void remove22(ArrayList<String> list, String target) {
final CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list);
for (String item : cowList) {
if (item.equals(target)) {
cowList.remove(item);
}
}
print(cowList);
}
还没有评论,来说两句吧...