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