/** * @deprecated use {@link #newResourceIterator(Iterator, Resource...)} */ @Deprecated public static <R> ResourceIterator<R> newResourceIterator( Resource resource, Iterator<R> iterator ) { return newResourceIterator( iterator, resource ); }
@Override public boolean hasNext() { boolean hasNext = iterator.hasNext(); if ( !hasNext ) { close(); } return hasNext; }
@Override public boolean hasNext() { boolean hasNext = iterator.hasNext(); if ( !hasNext ) { close(); } return hasNext; }
@Override ResourceIterator<Relationship> doExpand( Path path, BranchState state ) { final Node node = path.endNode(); ResourceIterator<Relationship> resourceIterator = asResourceIterator( node.getRelationships().iterator() ); return newResourceIterator( new FilteringIterator<>( resourceIterator, rel -> { Exclusion exclude = exclusion.get( rel.getType().name() ); exclude = (exclude == null) ? defaultExclusion : exclude; return exclude.accept( node, rel ); } ), resourceIterator ); }
@Override ResourceIterator<Relationship> doExpand( final Path path, BranchState state ) { ResourceIterator<Relationship> resourceIterator = expander.doExpand( path, state ); return newResourceIterator( new FilteringIterator<>( resourceIterator, item -> { Path extendedPath = ExtendedPath.extend( path, item ); for ( Filter filter : filters ) { if ( filter.exclude( extendedPath ) ) { return false; } } return true; } ), resourceIterator ); }
@Test void streamShouldCloseSingleOnCompleted() { // Given AtomicBoolean closed = new AtomicBoolean( false ); ResourceIterator<Integer> resourceIterator = newResourceIterator( iterator( new Integer[]{1, 2, 3} ), () -> closed.set( true ) ); ResourceIterable<Integer> iterable = () -> resourceIterator; // When List<Integer> result = iterable.stream().collect( Collectors.toList() ); // Then assertEquals( asList(1,2,3), result ); assertTrue( closed.get() ); }
@Test void streamShouldCloseMultipleOnCompleted() { // Given AtomicInteger closed = new AtomicInteger(); Resource resource = closed::incrementAndGet; ResourceIterator<Integer> resourceIterator = newResourceIterator( iterator( new Integer[]{1, 2, 3} ), resource, resource ); ResourceIterable<Integer> iterable = () -> resourceIterator; // When List<Integer> result = iterable.stream().collect( Collectors.toList() ); // Then assertEquals( asList(1,2,3), result ); assertEquals( 2, closed.get(), "two calls to close" ); } }
/** * @deprecated use {@link #newResourceIterator(Iterator, Resource...)} */ @Deprecated public static <R> ResourceIterator<R> newResourceIterator( Resource resource, Iterator<R> iterator ) { return newResourceIterator( iterator, resource ); }
@Override ResourceIterator<Relationship> doExpand( Path path, BranchState state ) { final Node node = path.endNode(); ResourceIterator<Relationship> resourceIterator = asResourceIterator( node.getRelationships().iterator() ); return newResourceIterator( new FilteringIterator<>( resourceIterator, rel -> { Exclusion exclude = exclusion.get( rel.getType().name() ); exclude = (exclude == null) ? defaultExclusion : exclude; return exclude.accept( node, rel ); } ), resourceIterator ); }
@Override ResourceIterator<Relationship> doExpand( final Path path, BranchState state ) { ResourceIterator<Relationship> resourceIterator = expander.doExpand( path, state ); return newResourceIterator( new FilteringIterator<>( resourceIterator, item -> { Path extendedPath = ExtendedPath.extend( path, item ); for ( Filter filter : filters ) { if ( filter.exclude( extendedPath ) ) { return false; } } return true; } ), resourceIterator ); }