在移除list中的元素时,我们每次移除一个元素,list集合的size()都会发生改变,平时使用的for循环就无法完整的遍历完整个集合.
例如:
public static void main(String[] args) {
List<String[]> list = new ArrayList<>();
String[] str1 = {"",""};
String[] str2 = {"",""};
String[] str3 = {"1","1"};
String[] str4 = {"2","2"};
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
for(int i=0;i<list.size();i++){
StringBuffer sb = new StringBuffer();
String[] str = list.get(i);
sb.append(str[0]);
sb.append(str[1]);
if(StringUtils.isBlank(sb.toString())){
list.remove(i);
}
}
for(int i=0 ;i<list.size();i++){
System.out.println(list.get(i)[0]+"======"+list.get(i)[1]);
}
}
输出结果
======
1======1
2======2
可以看到输出的结果明显不是我们想要看到的,所以我们创建一个工具类,使用list的迭代器来移除一个元素,方法如下
public class ListUtil {
public static List<String[]> changeList(List<String[]> list) {
if (list == null) {
return null;
}
if (list.size() > 0) {//移除全为空的行{null,null,null...} 或 {"","",""...}
Iterator<String[]> iter = list.iterator();//获取迭代器
while(iter.hasNext()){
StringBuffer str = new StringBuffer();//每行的数据和
String[] strings = iter.next();//取下一行
for(String s : strings ){
if(StringUtils.isNotBlank(s)){
str.append(s);
}
}
if(StringUtils.isBlank(str.toString())){//一行为空,移除一行
iter.remove();
}
}
}
if(list.size()>0){
return list;
}else{
return null;
}
}
}