我只需要一张具有与某个正则表达式不匹配的所有键和值的地图。有没有一种简单的方法可以在Java中否定find()或matches()?
Pattern pattern = Pattern.compile("(.*)"+dateFormatter.format(Date.from(now))+"(.*)");
Map<String, Writer> toBeClosed = orcWriterMap.entrySet().stream()
.filter(entry -> pattern.matcher(entry.getKey()).find())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
答案 0 :(得分:2)
您也可以将Pattern转换为谓词。 例如:
Predicate<String> predicate = pattern.asPredicate().negate();
然后
filter(entry -> predicate.test(entry.getKey())
答案 1 :(得分:1)
请勿使用(!
)
.filter(entry -> ! pattern.matcher(entry.getKey()).find())
答案 2 :(得分:1)
您可以否定马瑟matches()
功能。
.filter(entry -> !pattern.matcher(entry.getKey()).matches())
在这种情况下,使用matches()函数比使用find()函数更好,因为我们不处理多个子序列。
答案 3 :(得分:1)
查看代码的以下部分:
filter(entry -> pattern.matcher(entry.getKey()).find())
您在此处过滤源流。 对于每个源条目,您可以检查此条目中是否包含该密钥 在模式的某个地方有匹配。
因此,如果您想获得包含不匹配模式的键的地图, 然后只是否定过滤条件:
filter(entry -> !pattern.matcher(entry.getKey()).find())
注意感叹号 - 否定运算符。