/** Return an {:@code Iter} that will see each element of the underlying iterator only once. * Note that this need working memory to remember the elements already seen. */ public Iter<T> distinct() { return iter((distinct(iterator))) ; }
/** Return an {:@code Iter} that will see each element of the underlying iterator only once. * Note that this need working memory to remember the elements already seen. */ public Iter<T> distinct() { return iter((distinct(iterator))) ; }
static Iterator<Node> subjects(Graph graph) { // Later: ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY); return Iter.iter(iter).map(subjects).distinct(); }
@Override public Iterator<Node> listGraphNodes() { Iter<Quad> iter = Iter.iter(find(Node.ANY, Node.ANY, Node.ANY, Node.ANY)) ; return iter.map(Quad::getGraph).distinct() ; }
/** List the predicates in a graph (no duplicates) */ public static Iterator<Node> listPredicates(Graph graph) { ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY) ; return Iter.iter(iter).map(Triple::getPredicate).distinct() ; }
/** List the subjects in a graph (no duplicates) */ public static Iterator<Node> listSubjects(Graph graph) { ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY) ; return Iter.iter(iter).map(Triple::getSubject).distinct() ; }
/** List the objects in a graph (no duplicates) */ public static Iterator<Node> listObjects(Graph graph) { ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY) ; return Iter.iter(iter).map(Triple::getObject).distinct() ; }
/** List the subjects in a graph (no duplicates) */ public static Iterator<Node> listSubjects(Graph graph) { ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY) ; return Iter.iter(iter).map(projectTripeSubject).distinct() ; }
/** List the predicates in a graph (no duplicates) */ public static Iterator<Node> listPredicates(Graph graph) { ExtendedIterator<Triple> iter = graph.find(Node.ANY, Node.ANY, Node.ANY) ; return Iter.iter(iter).map(projectTripePredicate).distinct() ; }
@Override public ExtendedIterator<Triple> getTripleIterator(Node value) { if (value == null) throw new NullPointerException("value is null"); IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); for (Column column : this.getColumns()) { ExtendedIterator<Triple> eIter = getTripleIterator(column,value); iter.add(eIter); } return WrappedIterator.create(Iter.distinct(iter)); }
private QueryIterator variableSubject(Binding binding, Node s, SpatialMatch match, ExecutionContext execCxt) { Var v = Var.alloc(s); List<Node> r = query(match); // Make distinct. Note interaction with limit is imperfect r = Iter.iter(r).distinct().toList(); QueryIterator qIter = new QueryIterExtendByVar(binding, v, r.iterator(), execCxt); return qIter; }
@Override public ExtendedIterator<Triple> getTripleIterator(Node value) { // use POS index ( O(n), n= column count ) if (value == null) throw new NullPointerException("value is null"); IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); for (Column column : this.getColumns()) { ExtendedIterator<Triple> eIter = getTripleIterator(column,value); iter.add(eIter); } return WrappedIterator.create(Iter.distinct(iter)); }
private QueryIterator variableSubject(Binding binding, Node s, SpatialMatch match, ExecutionContext execCxt) { Var v = Var.alloc(s); List<Node> r = query(match); // Make distinct. Note interaction with limit is imperfect r = Iter.iter(r).distinct().toList(); QueryIterator qIter = new QueryIterExtendByVar(binding, v, r.iterator(), execCxt); return qIter; }
@Test public void distinct_01() { List<String> x = Arrays.asList("a", "b", "a"); Iterator<String> iter = Iter.distinct(x.iterator()); test(iter, "a", "b"); }
@Test public void distinct_03() { List<String> x = Arrays.asList("a", "a", "b", "b", "b", "a", "a"); Iterator<String> iter = Iter.distinct(x.iterator()); test(iter, "a", "b"); }
protected ExtendedIterator<Triple> graphUnionFind(Node s, Node p, Node o) { Node g = graphNode(gn) ; // Implementations may wish to do better so this is separated out. // For example, Iter.distinctAdjacent is a lot cheaper than Iter.distinct // but assumes things come back in a particular order Iterator<Quad> iterQuads = getDataset().find(g, s, p, o) ; Iterator<Triple> iter = GLib.quads2triples(iterQuads) ; // Suppress duplicates after projecting to triples. iter = Iter.distinct(iter) ; return WrappedIterator.createNoRemove(iter) ; }
@Override public ExtendedIterator<Triple> getTripleIterator() { // use PSO index to scan all the table (slow) IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); for (Column column : getColumns()) { iter.add(getTripleIterator(column)); } return WrappedIterator.create(Iter.distinct(iter)); }
@Override public ExtendedIterator<Triple> getTripleIterator() { IteratorConcat<Triple> iter = new IteratorConcat<Triple>(); for (Column column : getColumns()) { iter.add(getTripleIterator(column)); } return WrappedIterator.create(Iter.distinct(iter)); }
@Override public Iterator<Node> listGraphNodes() { Iterator<Tuple<NodeId>> x = quadTable.getNodeTupleTable().findAll() ; Iterator<NodeId> z = Iter.iter(x).map(t -> t.get(0)).distinct() ; return NodeLib.nodes(quadTable.getNodeTupleTable().getNodeTable(), z) ; }
@Override public Iterator<Node> listGraphNodes() { checkNotClosed(); Iterator<Tuple<NodeId>> x = storage.quadTable.getNodeTupleTable().findAll(); Iterator<NodeId> z = Iter.iter(x).map(t -> t.get(0)).distinct(); return NodeLib.nodes(storage.quadTable.getNodeTupleTable().getNodeTable(), z); }