【发布时间】:2016-11-24 01:47:33
【问题描述】:
在 Java 中是否有某种标准方式来表达一个操作来测试一个 Predicate 是否比另一个 Predicate 更严格?
我可以想象像pred1.isStricterThan(pred2) 这样的东西,但是我在 API 中看不到这样的东西:https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html
和https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Predicate.html
.
这种类型的检查可能有用,例如重复使用缓存的搜索结果。
我看到了isEqual() 和equals(),这可能会有所帮助,但还有可能进行进一步优化...
编辑:
例子:
-
string.contains("xy")比string.contains("x")更严格 -
string.contains("xy") && string.contains("ab")比string.contains("xy")更严格 -
x > 3比x > 2更严格 -
string.contains("abc") 不比string.contains("cd")更严格
严格性检查方法当然必须根据具体情况巧妙实施。
编辑 2&3:更严格的谓词在用于过滤时,应返回不太严格的谓词的子集。
编辑 4:注意:我不是要求 实现。相反,我问的是是否有一些 API 可以以标准方式表达这些检查。
【问题讨论】:
-
“更严格”是什么意思?如果你能清楚而准确地定义,我就有可能给出答案。
-
@Bohemian - 我假设这意味着对于在同一域上运行的两个谓词,更严格的谓词的
test()方法(对于 Java 版本)返回true的子集不太严格的谓词评估为true,仅此而已。 -
@Bohemian:谢谢,我添加了 3 个示例和 1 个反例
-
不,没有,因为没有理智的方法来测试这个,当然不是
Predicate提供的接口。除非两个实例都知道彼此内部的极其详细的信息,否则无法进行这种检查。听起来有点像“我们可以解决停机问题吗”。 -
不,没有,因为在特定情况之外,这样的检查是不可能的。这就是它的全部内容。