java - Java 8 基于正则表达式从数组/数组列表中删除一个项目
问题描述
在 java 8 中是否有更好的方法来实现以下目标?
String regex = "^SACHI";
for (String temp : personalNames ) {
if (temp.matches(regex)){
personalNames.remove(temp);
}
}
解决方案
您可以使用
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"));
它没有正则表达式初始化开销。
推荐阅读
- java - Android studio中两个数字相加的错误结果
- javascript - 如何创建指向选项卡的外部 URL 链接并检查单选按钮?
- mysql - Mysql8.0升级:得到错误:1045:用户'ODBC'@'localhost'的访问被拒绝
- c++ - 使用 std::unique_ptr 的通用单链表,Microsoft Visual Studio C++ 中的未知未编译错误
- php - 外部变量在类内部定义
- shell - 在 JSON 文件中查找和替换
- firebase - 在 Firebase Cloud Functions 上发出 API 请求
- terminal - Atom 中的拆分终端
- java - 如何将我自己的图片添加到android背景
- python - “SyntaxError: invalid syntax” 总是在带有 micro:bit 的 REPL 模式下显示在 mu-editor 上