抱歉我的英文。我需要使用正则表达式按名称过滤List<Contact>
并获取名称与正则表达式匹配的新List<Contact>
。联系人有两个字段名称和ID。
例如
^B.*$ - returns contacts that do NOT start with B
也许是这样的,但我不知道怎么做,选择一个名字并与正则表达式进行比较。
Pattern pattern = Pattern.compile("...");
List<String> matching = list.stream()
.filter(pattern.asPredicate())
.collect(Collectors.toList());
我该怎么做?
答案 0 :(得分:3)
您可以按名称过滤List<Contact>
。例如:
Pattern pattern = Pattern.compile("...");
List<Contact> matched = list.stream()
.filter(it -> it!=null && it.getName()!=null && pattern.matcher(it.getName()).matches())
.collect(Collectors.toList());
OR 使用过滤器链使代码更具表现力,例如:
List<Contact> matched = list.stream()
.filter(Objects::nonNull)
.filter(it -> it.getName() != null)
.filter(it -> pattern.matcher(it.getName()).matches())
.collect(Collectors.toList());