有没有更好的方法来实现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 次 |
最近记录: |