📅  最后修改于: 2023-12-03 15:31:54.924000             🧑  作者: Mango
在Java 11中,引入了 Predicate
接口的新方法 not()
,该方法允许反转给定谓词的结果。
使用 not()
方法不需要显式地将谓词存储在一个变量中,它可以直接应用于一个 Predicate
对象上。
default Predicate<T> not()
无。
返回一个与原来谓词返回结果相反的谓词。
假设我们有以下谓词:
Predicate<String> isNumeric = s -> s.matches("\\d+");
该谓词检查给定的字符串是否只包含数字字符。
现在我们想要定义一个谓词来检查一个字符串不只包含数字字符。我们可以使用 not()
方法来反转 isNumeric
谓词的结果:
Predicate<String> notNumeric = isNumeric.negate();
现在,notNumeric
谓词将检查给定的字符串是否包含至少一个非数字字符。
我们可以编写以下测试方法来验证 notNumeric
谓词的行为:
public static void main(String[] args) {
Predicate<String> isNumeric = s -> s.matches("\\d+");
Predicate<String> notNumeric = isNumeric.negate();
String numericString = "123";
String nonNumericString = "1a2b3c";
// 输出 true,因为 "123" 只包含数字字符
System.out.println(isNumeric.test(numericString));
// 输出 false,因为 "1a2b3c" 包含非数字字符
System.out.println(isNumeric.test(nonNumericString));
// 输出 false,因为 "123" 只包含数字字符
System.out.println(notNumeric.test(numericString));
// 输出 true,因为 "1a2b3c" 包含非数字字符
System.out.println(notNumeric.test(nonNumericString));
}
上述代码将输出以下结果:
true
false
false
true
这表明 notNumeric
谓词正确地反转了 isNumeric
谓词的结果。
使用 Predicate.not()
方法可以方便地反转给定谓词的结果,而无需显式地将谓词存储在一个变量中。这种技术对于编写清晰简洁的代码非常有用。