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

来源:互联网 发布:浪潮云会计软件 编辑:程序博客网 时间:2024/06/02 22:28

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

0 0