Java中 List移除相應元素的超簡潔寫法
阿新 • • 發佈:2019-01-25
最近遇到了一個需求(好吧以前也遇到過),就是將一個List中的部分元素去除,如把string中帶數字的元素去除,以前是各種遍歷各種不爽,今天發現用Java8中的lambda寫,只需三行。好了上程式碼:
List<String> list = new ArrayList<String>(){
{
// 為list新增資料
addAll(Arrays.asList("wangzhen456liupei123".split("")));
add("1521"); // 純數字資料
add("wanghzen123" ) // 數字+字元資料
add("wangzhen"); // 純字串
}
};
System.out.println("初始資料:" + list);
Pattern pattern = Pattern.compile("\\d");//匹配數字
Predicate<String> filter = s -> pattern.matcher(s).find();
list.removeIf(filter);//移除
System.out.println(list);
輸出如下:
初始資料:[w, a, n, g, z, h, e, n, 4, 5, 6, l, i, u, p, e, i, 1, 2, 3, 1521, wangzhen]
[w, a, n, g, z, h, e, n, l, i, u, p, e, i, wangzhen]
其實有機智的朋友可能已經發現了,不要說三行了,一行都可以:
list.removeIf(s -> Pattern.compile("\\d").matcher(s).find());
雖說如果你想這樣寫也沒人能攔著你(同時你也要確定三個月之後依然能看懂)。但是從程式碼的可讀性和可維護性角度來講,倒是不如前面三行的那個寫法。
總結:越精簡的程式碼就越應該有註釋,不然哪天手一抽就Ctrl+/了 XD