Java中 List移除相应元素的超简洁写法

最近遇到了一个需求(好吧以前也遇到过),就是将一个List中的部分元素去除,如把string中带数字的元素去除,以前是各种遍历各种不爽,今天发现用Java8中的lambda写,只需三行。好了上代码:

List list = new ArrayList(){ 
    {
        // 为list添加数据
        addAll(Arrays.asList("wangzhen456liupei123".split("")));
        add("1521"); // 纯数字数据
        add("wanghzen123") // 数字+字符数据
        add("wangzhen"); // 纯字符串 
    }
};

System.out.println("初始数据:" + list);

Pattern pattern = Pattern.compile("\\d");//匹配数字
Predicate 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

你可能感兴趣的:(Java)