关于list中移除某种数据类型的方法
众所周知,list在不泛型的情况下是可以存放各种数据类型的,代码如下:
1 public static void main(String[] args) { 2 List list=new ArrayList<>(); 3 list.add("我是字符串"); 4 list.add(123); 5 list.add(new HashMap<>()); 6 System.out.println(list); 7 }
可以得到控制台的输出结果是:
[我是字符串, 123, {}]
而关于list移除数据的方法,很容易百度到,例如:
1 public static void main(String[] args) { 2 List list=new ArrayList<>(); 3 list.add("我是字符串"); 4 list.add(123); 5 list.add(new HashMap<>()); 6 System.out.println(list);
7 list.remove(0);//根据下标移除 8 System.out.println(list); 9 list.remove(Integer.valueOf(123));//根据元素内容进行移除 10 System.out.println(list); 11 }
可以得到控制台的输出结果是:
[我是字符串, 123, {}]
[123, {}]
[{}]
而我们本次是根据数据类型进行移除list中的元素,此时是不无法确定下标或元素值的,因此使用Iterator,代码如下:
1 public static void main(String[] args) { 2 List list=new ArrayList<>(); 3 list.add("我是字符串"); 4 list.add(123); 5 list.add(new HashMap<>()); 6 System.out.println(list);
7 delData(list, HashMap.class); 8 System.out.println(list); 9 delData(list, "我是字符串".getClass()); 10 System.out.println(list); 11 } 12 13 /** 14 * list清除某种类型数据 15 * @param list list本体 16 * @param classObj 要清除的数据类型 17 */ 18 public static void delData(List list,Class classObj){ 19 Iterator<Object> it=list.iterator(); 20 while (it.hasNext()) { 21 if (classObj==it.next().getClass()) { 22 it.remove(); 23 } 24 } 25 }
可以得到控制台的输出结果是:
[我是字符串, 123, {}]
[我是字符串, 123]
[123]
最后,惯例写下一些题外话,我这次问题也是在工作中遇到的,本身其实很简单,只是想直接百度偷懒下去复制粘贴,结果几分钟了没找到类似的答案,所以就顺便写下了,说不定能帮到其他的想偷懒的,或者刚入行的java新手呢。
再另外,说一句,list移除元素后(不管哪种方式移除),下标是动态直接变的,即后面的元素直接前移的,此时如果涉及到list下标进行操作的就要注意了(当年的我就是。。。说不定能帮到陷入此坑的初学者)