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這條道路上越走越遠,越走越順。