1.普通人的第一反应(包括我自己),是for循环整个List,然后在循环体里面进行if条件判断,然后再调用list.remove(obj)方法来移除某个元素。
代码示例
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); list.add(9); list.add(10); list.forEach(i -> { if(i%2==0){ list.remove(i); } }); list.forEach(i -> { System.out.println(i); });
但是如果你也这么写过的话,肯定知道这条路是行不通的,程序运行到这里会报异常。
2.于是我们换了一种思路来考虑这个问题,那就是通过Iterator来实现这个效果
代码示例
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); list.add(9); list.add(10); Iterator<Integer> iterator = list.listIterator(); while (iterator.hasNext()) { Integer i = iterator.next(); if(i%2==0){ iterator.remove(); } } list.forEach(i -> { System.out.println(i); });
首先,这种方案是可以行得通的,只是代码略微有些复杂。
3.于是我们想到了第三种方案,那就是直接通过lambda表达式来实现。
代码示例
List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(7); list.add(8); list.add(9); list.add(10); list.removeIf(i -> i%2==0); list.forEach(i -> { System.out.println(i); });
只要一行代码就可以实现整个处理,是不是显得很高大上。
好了,这个简单的小测试就讲到这里。
不过这也说明了一个道理,想要到达一个目的地,有很多条路可以选择,至于怎样选择,选择什么的路线,这就要看个人了。
最后,希望大家可以在Java这条道路上越走越远,越走越顺。