有没有更好的方法来实现java 8中的以下内容?
String regex = "^SACHI";
for (String temp : personalNames ) {
if (temp.matches(regex)){
personalNames.remove(temp);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用
personalNames.removeIf(Pattern.compile("^SACHI").asPredicate());
Run Code Online (Sandbox Code Playgroud)
你也可以使用更简单的
personalNames.removeIf(s -> s.matches("^SACHI"));
Run Code Online (Sandbox Code Playgroud)
但它会Pattern.compile("^SACHI")在最糟糕的情况下为每个元素在引擎盖下执行.请注意,Pattern创建的compile是不可变的并且可以共享,因此,您也可以只创建一次,例如
static final Pattern REMOVAL_PATTERN = Pattern.compile("^SACHI");
Run Code Online (Sandbox Code Playgroud)
并使用它
personalNames.removeIf(REMOVAL_PATTERN.asPredicate());
Run Code Online (Sandbox Code Playgroud)
asPredicate()使用find()而不是matches(),但由于你的模式有^锚,它没有任何区别.在JDK 11中添加asMatchPredicate()了获取谓词的方法matches().
如果你想要的只是在开头匹配一个文字字符串,你也可以使用
personalNames.removeIf(s -> s.startsWith("SACHI"));
Run Code Online (Sandbox Code Playgroud)
它没有正则表达式初始化开销.
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |