Create Stream#pushBack() method

This commit is contained in:
Zafar Khaja 2014-06-23 21:29:02 +03:00
parent e98a07dd5e
commit 82dd3c2968
2 changed files with 34 additions and 0 deletions

View File

@ -115,6 +115,15 @@ public class Stream<E> implements Iterable<E> {
throw new UnexpectedElementException(lookahead, expected);
}
/**
* Pushes back one element at a time.
*/
public void pushBack() {
if (offset > 0) {
offset--;
}
}
/**
* Returns the next element in this stream without consuming it.
*

View File

@ -203,4 +203,29 @@ public class StreamTest {
}
));
}
@Test
public void shouldPushBackOneElementAtATime() {
Stream<Character> stream = new Stream<Character>(
new Character[] {'a', 'b', 'c'}
);
assertEquals(Character.valueOf('a'), stream.consume());
stream.pushBack();
assertEquals(Character.valueOf('a'), stream.consume());
}
@Test
public void shouldStopPushingBackWhenThereAreNoElements() {
Stream<Character> stream = new Stream<Character>(
new Character[] {'a', 'b', 'c'}
);
assertEquals(Character.valueOf('a'), stream.consume());
assertEquals(Character.valueOf('b'), stream.consume());
assertEquals(Character.valueOf('c'), stream.consume());
stream.pushBack();
stream.pushBack();
stream.pushBack();
stream.pushBack();
assertEquals(Character.valueOf('a'), stream.consume());
}
}