Some small issues with the stream library (original) (raw)
Paul Sandoz paul.sandoz at oracle.com
Wed Jul 2 09:21:33 UTC 2014
- Previous message: RFR 8043328 and 8043327: errors in stream docs
- Next message: RFR 8044047: Missing null pointer checks for streams
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Kasper,
Sorry for the very late reply, i forgot about this, but was reminded when trawling through some bugs.
On Apr 17, 2014, at 3:13 PM, Kasper Nielsen <kasperni at gmail.com> wrote:
Hi,
I'm trying to build a small test suite for for a custom stream implementation I'm making. And I found a couple of small issues with java.util.stream.Stream. Nothing major but might be worth fixing 1) There are couple of places where null checks are missing *Stream.close Int/Double/LongStream.flatmap Int/Double/LongStream.collect(x,y, 3rd) 3rd argument not being checked
2) These methods does throw NPE but they consume the stream before throwing. I like to think of null parameter checks as side-effect free. Stream.forEach Stream.forEachOrdered Stream.sorted Stream.toArray
I see you logged a bug (thanks for doing that):
https://bugs.openjdk.java.net/browse/JDK-8044047
For 1) I presume you mean BaseStream.onClose rather than BaseStream.close?
For 2) i am not sure it is worth enforcing, specification-wise. It's hard to envisage how a client would recover and reuse the stream in such scenarios, and even if it were the case it seems a very minor one. Currently the implementation is free to consolidate checks, even if there are side-effects before those checks occur.
3) LongStream.Average does not always work as intended with high long values
Arrays.asList(Long.MAXVALUE - 1000L, Long.MAXVALUE - 1000L).stream().mapToLong(e -> e).average().getAsDouble; return -1001.0 Same thing with SummaryStatistics
Right, we don't check for overflow of the sum. That is stated on the *SummaryStatistics class docs, but not in the Int/LongStream.sum/average method. I think we should add an @implNote to those methods.
Paul.
- Previous message: RFR 8043328 and 8043327: errors in stream docs
- Next message: RFR 8044047: Missing null pointer checks for streams
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]