首页 > 解决方案 > Java 8 基于正则表达式从数组/数组列表中删除一个项目

问题描述

在 java 8 中是否有更好的方法来实现以下目标?

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

标签: javajava-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()了获取谓词 using的方法。matches()


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

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

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


推荐阅读