Java - 由Regex过滤列表条目

Ben*_*ler 12 java regex collections

我的代码看起来像这样:

List<String> filterList(List<String> list, String regex) {
  List<String> result = new ArrayList<String>();
  for (String entry : list) {
    if (entry.matches(regex)) {
      result.add(entry);
    }
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

它返回一个列表,其中只包含与之匹配的条目regex.我想知道是否有这样的内置功能:

List<String> filterList(List<String> list, String regex) {
  List<String> result = new ArrayList<String>();
  result.addAll(list, regex);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

sch*_*eld 57

除了康斯坦丁的答案之外:Java 8还增加Predicate了对Pattern类的支持asPredicate,Matcher.find()内部调用:

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

List<String> matching = list.stream()
                            .filter(pattern.asPredicate())
                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

太棒了!

  • 这是答案!:-)太棒了,谢谢分享.(我自己,懒得一直向下滚动找到你的答案,我必须找到关于asPredicate的艰难方式:-)) (3认同)

Kon*_*hov 19

在java 8中,您可以使用新的流API执行以下操作:

List<String> filterList(List<String> list, String regex) {
    return list.stream().filter(s -> s.matches(regex)).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)