如何从请求中获取参数为regex的数据?

时间:2017-07-12 15:47:20

标签: java java-8

抱歉我的英文。我需要使用正则表达式按名称过滤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());

我该怎么做?

1 个答案:

答案 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());