説明しているものはgraphです。あなたは述語厳密グラフを定義し、それを照会するには、Googleグアバの新しいgraph APIを使用することができます。
Predicate<String> containsX = string -> string.contains("x");
Predicate<String> containsXy = string -> string.contains("xy");
Predicate<String> containsXyAndAb = string -> string.contains("xy")
&& string.contains("ab");
Predicate<Integer> greaterThan2 = x -> x > 2;
Predicate<Integer> greaterThan3 = x -> x > 3;
Predicate<String> containsAbc = string -> string.contains("abc");
Predicate<String> containsCd = string -> string.contains("cd");
MutableGraph<Predicate<?>> predicateStrictnessGraph = GraphBuilder.directed().build();
predicateStrictnessGraph.addNode(containsX);
predicateStrictnessGraph.addNode(containsXy);
predicateStrictnessGraph.addNode(containsXyAndAb);
predicateStrictnessGraph.addNode(greaterThan3);
predicateStrictnessGraph.addNode(containsAbc);
predicateStrictnessGraph.addNode(containsCd);
predicateStrictnessGraph.putEdge(containsXy, containsX);
predicateStrictnessGraph.putEdge(containsXyAndAb, containsXy);
predicateStrictnessGraph.putEdge(greaterThan3, greaterThan2);
boolean isContainsXyStricterThanContainsX =
Graphs.reachableNodes(predicateStrictnessGraph, containsXy)
.contains(containsX);
// result: true
boolean isContainsXyStricterThanContainsXyAndAb =
Graphs.reachableNodes(predicateStrictnessGraph, containsXy)
.contains(containsXyAndAb);
// result: false
さらに、これは指定された述語より厳しい述語のためのグラフを照会検討し説明するために:
Predicate<String> containsAb = string -> string.contains("ab");
predicateStrictnessGraph.addNode(containsAb);
predicateStrictnessGraph.putEdge(containsAbc, containsAb);
predicateStrictnessGraph.putEdge(containsXyAndAb, containsAb);
Set<Predicate<?>> containsAbAndStricterPredicates =
Graphs.reachableNodes(Graphs.transpose(predicateStrictnessGraph), containsAb);
// result: [containsAb, containsAbc, containsXyAndAb]
詳細について、GraphsExplained · google/guava Wikiを参照してください。
「厳密」とは*正確にはどういう意味ですか?それを明確かつ正確に定義することができれば、答えが可能です。 – Bohemian
@Bohemian - 厳密な述語の 'test()'メソッド(Java版の場合)は、同じドメイン上で動作する2つの述語に対して、より厳密でない述語のサブセットに対して 'true'を返すと仮定します「真」と評価し、それ以外は何も評価しない。 –
@Bohemian:ありがとう、私は3つの例と1つの反例を追加しました – KarolDepka