有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

对不起我的英语。我需要使用正则表达式按名称过滤List<Contact>,并在名称与正则表达式匹配的地方获得新的List<Contact>。联系人有两个字段name和id

比如

^B.*$ - returns contacts that do NOT start with B

也许是这样,但我不知道如何通过选择一个名称并与regex进行比较来做到这一点

Pattern pattern = Pattern.compile("...");

List<String> matching = list.stream()
        .filter(pattern.asPredicate())
        .collect(Collectors.toList());

我该怎么做


共 (1) 个答案

  1. # 1 楼答案

    您可以按名称筛选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());
    

    使用过滤器链使代码更具表现力,例如:

    List<Contact> matched = list.stream()
                                .filter(Objects::nonNull)
                                .filter(it -> it.getName() != null)
                                .filter(it -> pattern.matcher(it.getName()).matches())
                                .collect(Collectors.toList());