/** * @return true if this object contains anonymous expressions referred multiple times. This is * called structure sharing. An example can be:<br> * * <pre> * some P C subClassOf some Q (some P C) * </pre> * * <br> * This can happen in axioms as well as in expressions:<br> * * <pre> * (some P C) and (some Q (some P C)) * </pre> * * <br> */ default boolean hasSharedStructure() { Map<OWLObject, AtomicInteger> counters = new HashMap<>(); Stream<OWLObject> filter = flatComponents(this).filter(x -> x instanceof OWLObject) .map(x -> (OWLObject) x).filter(OWLObject::isAnonymousExpression); filter .forEach(x -> counters.computeIfAbsent(x, q -> new AtomicInteger(0)).incrementAndGet()); return counters.values().stream().anyMatch(x -> x.get() > 1); }
/** * @return true if this object contains anonymous expressions referred multiple times. This is * called structure sharing. An example can be:<br> * * <pre> * some P C subClassOf some Q (some P C) * </pre> * * <br> * This can happen in axioms as well as in expressions:<br> * * <pre> * (some P C) and (some Q (some P C)) * </pre> * * <br> */ default boolean hasSharedStructure() { Map<OWLObject, AtomicInteger> counters = new HashMap<>(); Stream<OWLObject> filter = flatComponents(this).filter(x -> x instanceof OWLObject) .map(x -> (OWLObject) x).filter(OWLObject::isAnonymousExpression); filter .forEach(x -> counters.computeIfAbsent(x, q -> new AtomicInteger(0)).incrementAndGet()); return counters.values().stream().anyMatch(x -> x.get() > 1); }
/** * @return true if this object contains anonymous expressions referred multiple times. This is * called structure sharing. An example can be:<br> * * <pre> * some P C subClassOf some Q (some P C) * </pre> * * <br> * This can happen in axioms as well as in expressions:<br> * * <pre> * (some P C) and (some Q (some P C)) * </pre> * * <br> */ default boolean hasSharedStructure() { Map<OWLObject, AtomicInteger> counters = new HashMap<>(); Stream<OWLObject> filter = flatComponents(this).filter(x -> x instanceof OWLObject) .map(x -> (OWLObject) x).filter(OWLObject::isAnonymousExpression); filter .forEach(x -> counters.computeIfAbsent(x, q -> new AtomicInteger(0)).incrementAndGet()); return counters.values().stream().anyMatch(x -> x.get() > 1); }