Java 8基于正则表达式从数组/数组列表中删除项目

SachiDangalla 5 java java-8

有没有更好的方法来实现java 8中的以下内容?

String regex = "^SACHI";
for (String temp : personalNames ) {
    if (temp.matches(regex)){
         personalNames.remove(temp);
    }
}

Holger.. 8

您可以使用

personalNames.removeIf(Pattern.compile("^SACHI").asPredicate());

你也可以使用更简单的

personalNames.removeIf(s -> s.matches("^SACHI"));

但它会Pattern.compile("^SACHI")在最糟糕的情况下为每个元素在引擎盖下执行.请注意,Pattern创建的compile是不可变的并且可以共享,因此,您也可以只创建一次,例如

static final Pattern REMOVAL_PATTERN = Pattern.compile("^SACHI");

并使用它

personalNames.removeIf(REMOVAL_PATTERN.asPredicate());

asPredicate()使用find()而不是matches(),但由于你的模式有^锚,它没有任何区别.在JDK 11中添加asMatchPredicate()了获取谓词的方法matches().


如果你想要的只是在开头匹配一个文字字符串,你也可以使用

personalNames.removeIf(s -> s.startsWith("SACHI"));

它没有正则表达式初始化开销.