설명하는 내용은 graph입니다. 당신이 사용할 수있는 Google 구아바의 술어 엄격 그래프를 정의하고 그것을 쿼리 할 graph API 새로운 : 자세한 내용은
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]
이 지정된 조건보다 엄격한 조건에 대한 그래프를 조회 고려
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
더 설명하기 위해 , GraphsExplained · google/guava Wiki을 참조하십시오.
"엄격한"의미는 정확히 무엇입니까? 명확하고 정확하게 정의 할 수 있다면 대답이 가능할 것입니다. – Bohemian
@Bohemian - 동일한 도메인에서 작동하는 두 개의 술어에 대해 더 엄격한 술어의'test()'메소드 (자바 버전의 경우)는 덜 엄격한 술어의 서브 세트에 대해'true'를 리턴한다고 가정합니다 '사실'로 평가하고, 그 외에는 평가하지 않습니다. –
@ 보헤미안 : 감사합니다. 3 가지 예와 1 개의 반대 예제를 추가했습니다. – KarolDepka