有时会有需求去直接用stream方式去匹配18位身份证号, 下面介绍两种方式
filter()方法使用
先定义正则规则(可以自己替换规则):
String regex = "^([1-6][1-9]|50)\\d{4}(18|19|20)\\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
Pattern pattern=Pattern.compile(regex);
filter()方法:
List<User> userList = list.stream().filter(m -> pattern.matcher(m.getSfzh()).matches())
.collect(Collectors.toList());
map()方法使用
List<User> userList = list.stream().map(m -> {
System.out.println(pattern.matcher(m.getSfzh()).matches());
if (pattern.matcher(m.getSfzh()).matches()){
return m;
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toList());