/** * {@inheritDoc} */ @Override public T previous() { if ( !hasPrevious() ) { throw new NoSuchElementException( "Position is " + position ); } current = visited.get( --position ); return current; }
CachingIterator<Integer> caching = new CachingIterator<>( source ); assertEquals( 0, caching.position() ); assertTrue( caching.hasNext() ); assertEquals( 0, caching.position() ); assertFalse( caching.hasPrevious() ); assertEquals( (Integer) 0, caching.next() ); assertTrue( caching.hasNext() ); assertTrue( caching.hasPrevious() ); assertEquals( (Integer) 1, caching.next() ); assertTrue( caching.hasPrevious() ); assertEquals( (Integer) 1, caching.current() ); assertEquals( (Integer) 2, caching.next() ); assertEquals( (Integer) 2, caching.current() ); assertEquals( (Integer) 3, (Integer) caching.position() ); assertEquals( (Integer) 2, caching.current() ); assertTrue( caching.hasPrevious() ); assertEquals( (Integer) 2, caching.previous() ); assertEquals( (Integer) 2, caching.current() ); assertEquals( (Integer) 2, (Integer) caching.position() ); assertEquals( (Integer) 1, caching.previous() ); assertEquals( (Integer) 1, caching.current() ); assertEquals( (Integer) 1, (Integer) caching.position() ); assertEquals( (Integer) 0, caching.previous() ); assertEquals( (Integer) 0, (Integer) caching.position() ); assertFalse( caching.hasPrevious() ); assertThrows( IllegalArgumentException.class, () -> caching.position( -1 ), "Shouldn't be able to set a lower value than 0" );
/** * {@inheritDoc} */ @Override public T previous() { if ( !hasPrevious() ) { throw new NoSuchElementException( "Position is " + position ); } current = visited.get( --position ); return current; }