Expected behavior of a Streams.cycled() instance - found issues and questions
Dmitry Bessonov
dmitry.bessonov at oracle.com
Tue Oct 23 09:10:26 PDT 2012
Hello,
In the current API there is a utility class java.util.streams.Streams
which contains besides others method cycled().
There are few problems and questions regarding how a properly cycled
stream should behave
in terms of conforming to the standard contract of the Stream interface.
Some of the questions apply to any infinite stream.
0) (Sorry if this has been discussed already) - is there any legal way
to get flags of a random Stream instance?
1) Should it be allowed (as it is now) to concat to the end of an
infinite (cycled for example) stream?
2) Getting next element of a flatMap of a cycled stream leads to hanging:
Streams.cycle(Arrays.asList(1, 2, 3)).flatMap((Block<Object> sink,
Integer element) -> {}).iterator().next();
3) cycledStream.noneMatch((obj) -> false)) leads to hanging as well
though it probably should not.
4) Getting iterator for a sorted cycled stream leads to
java.lang.OutOfMemoryError: Java heap space
Streams.cycle(Arrays.asList(1, 2,
3)).sorted(Comparators.<Integer>reverseOrder()).iterator();
5) cycledStream.uniqueElements() leads to IllegalStateException though
it should not according to common sense.
6) This will lead to hanging:
Streams.cycle(Arrays.asList(1, 2, 3)).filter((obj) ->
false).iterator().hasNext();
7) This will lead to hanging as well:
Streams.cycle(Arrays.asList(1, 2, 3)).allMatch((obj) -> true);
8) And this hangs up also:
Streams.cycle(Arrays.asList(1, 2, 3)).anyMatch((obj) -> false);
-Dmitry
More information about the lambda-dev
mailing list