@Override public T getSingle() { // This instance will be closed by this call return Iterators.singleOrNull( this ); } }
/** * Returns the given iterable's single element or {@code null} if no * element found. If there is more than one element in the iterable a * {@link NoSuchElementException} will be thrown. * * If the {@link Iterable#iterator() iterator} created by the {@code iterable} implements {@link Resource} * it will be {@link Resource#close() closed} in a {@code finally} block after the single item * has been retrieved, or failed to be retrieved. * * @param <T> the type of elements in {@code iterable}. * @param iterable the {@link Iterable} to get elements from. * @return the single element in {@code iterable}, or {@code null} if no * element found. * @throws NoSuchElementException if more than one element was found. */ public static <T> T singleOrNull( Iterable<T> iterable ) { return Iterators.singleOrNull( iterable.iterator() ); }
/** * Returns the given iterator's single element. If there are no elements * or more than one element in the iterator a {@link NoSuchElementException} * will be thrown. * * If the {@code iterator} implements {@link Resource} it will be {@link Resource#close() closed} * in a {@code finally} block after the single item has been retrieved, or failed to be retrieved. * * @param <T> the type of elements in {@code iterator}. * @param iterator the {@link Iterator} to get elements from. * @return the single element in the {@code iterator}. * @throws NoSuchElementException if there isn't exactly one element. */ public static <T> T single( Iterator<T> iterator ) { return assertNotNull( iterator, singleOrNull( iterator ) ); }
private Relationship findRelationship( Node startNode, final Node endNode, final RelationshipDataLine relationship ) { return Iterators.singleOrNull( Iterators.filter( item -> item.getEndNode().equals( endNode ) && item.getProperty( "name" ).equals( relationship.name ), startNode.getRelationships( withName( relationship.type ) ).iterator() ) ); }
IndexDescriptor indexGetForSchema( SchemaDescriptor descriptor ) { IndexDescriptor indexDescriptor = storageReader.indexGetForSchema( descriptor ); Iterator<IndexDescriptor> indexes = iterator( indexDescriptor ); if ( ktx.hasTxStateWithChanges() ) { indexes = filter( SchemaDescriptor.equalTo( descriptor ), ktx.txState().indexDiffSetsBySchema( descriptor ).apply( indexes ) ); } return singleOrNull( indexes ); }
@Test void testSingleElement() { Object object = new Object(); Object object2 = new Object(); // single Iterable assertEquals( object, Iterables.single( asList( object ) ) ); assertThrows( NoSuchElementException.class, () -> Iterables.single( asList() ) ); assertThrows( NoSuchElementException.class, () -> Iterables.single( asList( object, object2 ) ) ); // single Iterator assertEquals( object, Iterators.single( asList( object ).iterator() ) ); assertThrows( NoSuchElementException.class, () -> Iterators.single( asList().iterator() ) ); assertThrows( NoSuchElementException.class, () -> Iterators.single( asList( object, object2 ).iterator() ) ); // singleOrNull Iterable assertEquals( object, Iterables.singleOrNull( asList( object ) ) ); assertNull( Iterables.singleOrNull( asList() ) ); assertThrows( NoSuchElementException.class, () -> Iterables.singleOrNull( asList( object, object2 ) ) ); // singleOrNull Iterator assertEquals( object, Iterators.singleOrNull( asList( object ).iterator() ) ); assertNull( Iterators.singleOrNull( asList().iterator() ) ); assertThrows( NoSuchElementException.class, () -> Iterators.singleOrNull( asList( object, object2 ).iterator() ) ); }
@Override public IndexReference indexGetForName( String name ) { ktx.assertOpen(); IndexDescriptor index = storageReader.indexGetForName( name ); if ( ktx.hasTxStateWithChanges() ) { Predicate<IndexDescriptor> namePredicate = indexDescriptor -> { try { return indexDescriptor.getUserSuppliedName().get().equals( name ); } catch ( NoSuchElementException e ) { //No name cannot match a name. return false; } }; Iterator<IndexDescriptor> indexes = ktx.txState().indexChanges().filterAdded( namePredicate ).apply( Iterators.iterator( index ) ); index = singleOrNull( indexes ); } if ( index == null ) { return IndexReference.NO_INDEX; } acquireSharedSchemaLock( index.schema() ); return index; }
@Override public T getSingle() { // This instance will be closed by this call return Iterators.singleOrNull( this ); } }
/** * Returns the given iterable's single element or {@code null} if no * element found. If there is more than one element in the iterable a * {@link NoSuchElementException} will be thrown. * * If the {@link Iterable#iterator() iterator} created by the {@code iterable} implements {@link Resource} * it will be {@link Resource#close() closed} in a {@code finally} block after the single item * has been retrieved, or failed to be retrieved. * * @param <T> the type of elements in {@code iterable}. * @param iterable the {@link Iterable} to get elements from. * @return the single element in {@code iterable}, or {@code null} if no * element found. * @throws NoSuchElementException if more than one element was found. */ public static <T> T singleOrNull( Iterable<T> iterable ) { return Iterators.singleOrNull( iterable.iterator() ); }
/** * Returns the given iterator's single element. If there are no elements * or more than one element in the iterator a {@link NoSuchElementException} * will be thrown. * * If the {@code iterator} implements {@link Resource} it will be {@link Resource#close() closed} * in a {@code finally} block after the single item has been retrieved, or failed to be retrieved. * * @param <T> the type of elements in {@code iterator}. * @param iterator the {@link Iterator} to get elements from. * @return the single element in the {@code iterator}. * @throws NoSuchElementException if there isn't exactly one element. */ public static <T> T single( Iterator<T> iterator ) { return assertNotNull( iterator, singleOrNull( iterator ) ); }
public Map findMovie(String title) { if (title==null) return Collections.emptyMap(); return Iterators.singleOrNull(cypher.query( "MATCH (movie:Movie {title:{title}})" + " OPTIONAL MATCH (movie)<-[r]-(person:Person)\n" + " RETURN movie.title as title, collect({name:person.name, job:head(split(lower(type(r)),'_')), role:r.roles}) as cast LIMIT 1", map("title", title))); }
IndexDescriptor indexGetForSchema( SchemaDescriptor descriptor ) { IndexDescriptor indexDescriptor = storageReader.indexGetForSchema( descriptor ); Iterator<IndexDescriptor> indexes = iterator( indexDescriptor ); if ( ktx.hasTxStateWithChanges() ) { indexes = filter( SchemaDescriptor.equalTo( descriptor ), ktx.txState().indexDiffSetsBySchema( descriptor ).apply( indexes ) ); } return singleOrNull( indexes ); }
@Override public IndexReference indexGetForName( String name ) { ktx.assertOpen(); IndexDescriptor index = storageReader.indexGetForName( name ); if ( ktx.hasTxStateWithChanges() ) { Predicate<IndexDescriptor> namePredicate = indexDescriptor -> { try { return indexDescriptor.getUserSuppliedName().get().equals( name ); } catch ( NoSuchElementException e ) { //No name cannot match a name. return false; } }; Iterator<IndexDescriptor> indexes = ktx.txState().indexChanges().filterAdded( namePredicate ).apply( Iterators.iterator( index ) ); index = singleOrNull( indexes ); } if ( index == null ) { return IndexReference.NO_INDEX; } acquireSharedSchemaLock( index.schema() ); return index; }
private Node getPersonNode() { TraversalDescription traversalDescription = underlyingNode.getGraphDatabase() .traversalDescription() .depthFirst() .relationships( NEXT, Direction.INCOMING ) .relationships( STATUS, Direction.INCOMING ) .evaluator( Evaluators.includeWhereLastRelationshipTypeIs( STATUS ) ); Traverser traverser = traversalDescription.traverse( getUnderlyingNode() ); return singleOrNull( traverser.iterator() ).endNode(); }