1. 程式人生 > >Java中 List移除相應元素的超簡潔寫法

Java中 List移除相應元素的超簡潔寫法

最近遇到了一個需求(好吧以前也遇到過),就是將一個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