如何在地图中找到与正则表达式不匹配的字符串键?

时间:2017-03-17 14:27:40

标签: java regex

我只需要一张具有与某个正则表达式不匹配的所有键和值的地图。有没有一种简单的方法可以在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));

4 个答案:

答案 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())

注意感叹号 - 否定运算符。