/** * Factory method for generating an iterator that is guaranteed * only to return one instance of every result from the wrapped * iterator <code>it</code>. * @param it An iterator to wrap * @return A iterator that returns the elements of the wrapped * iterator exactly once. If <code>it</code> is already a unique * extended iteator, it is not further wrapped. */ public static <T> ExtendedIterator<T> create( Iterator<T> it ) { return (it instanceof UniqueExtendedIterator<?>) ? ((UniqueExtendedIterator<T>) it) : new UniqueExtendedIterator<T>( it ); }
/** * @see Iterator#next() */ @Override public T next() { ensureHasNext(); T result = next; next = null; return result; } }
/** * @see Iterator#hasNext() */ @Override public boolean hasNext() { while (next == null && super.hasNext()) next = nextIfNew(); return next != null; }
@Override public ExtendedIterator<Triple> findWithContinuation(TriplePattern pattern, Finder finder) { prepare(); Node subject = pattern.getSubject(); Node predicate = pattern.getPredicate(); Node object = pattern.getObject(); ExtendedIterator<Triple> i = GraphQueryHandler.findTriple( kb, this, subject, predicate, object ); // always look at asserted triples at the end if( finder != null ) { TriplePattern tp = new TriplePattern( subject, predicate, object ); i = i.andThen( finder.find( tp ) ); } // make sure we don't have duplicates return UniqueExtendedIterator.create( i ); }