Static methods on Stream and friends
    Brian Goetz 
    brian.goetz at oracle.com
       
    Sun Apr 21 11:19:35 PDT 2013
    
    
  
I moved the following from Streams to Stream:
   Stream.builder()
   Stream.empty()
   Stream.singleton(T)
   Stream.of(T...)
   Stream.iterate(T, T -> T)
   Stream.generate(i -> T)
with the same on {Int,Long,Double}Stream, and also
   {Int,Long,Double}Stream.range(start, end)
   {Int,Long,Double}Stream.range(start, end, step)
It was suggested on lambda-dev that we should rename singleton to simply 
be an overload of "of":
   Stream.of(T)
   Stream.of(T...)
which seems reasonable.
Remaining open issues:
  - Some people are unhappy that range is half-open (which also means 
people are constrained to ranges topping out at MAX_VALUE-1 rather than 
MAX_VALUE).  Some options:
    - Add XxxStream.rangeExclusive(start, end)
    - Further doc hints, such as renaming the parameters to 
startInclusive / endExclusive
    - Nothing
  - Paul has suggested that generate be finite.  While this is kind of 
yucky, the practical difference between infinite and long-sized is 
pretty much negligible, and the version based on 
LongStream.range().map() parallellizes much better.
I propose to accept the suggestion of s/singleton/of/, go the "doc hint" 
route on range, and go finite on generate.
Also never closed on whether there was value to ints() / longs() -- 
these show up in lots of teaching examples, though less so in real-world 
code.  Still, teaching people how to think about this stuff is important.
    
    
More information about the lambda-libs-spec-observers
mailing list