StreamBuilder is awesome
    Ali Lahijani 
    alahijani at gmail.com
       
    Thu Apr 11 12:31:14 PDT 2013
    
    
  
I just want to express my delight at this great new feature.
StreamBuilder can be used to append to or concatenate Streams:
        StreamBuilder<E> builder = Streams.builder();
        s1.forEach(builder);
        builder.accept(x);
        builder.accept(y);
        s2.forEach(builder);
        Stream<E> stream = builder.build();
And it can be used to create streams fluently, and in push mode, which
is arguably the way that feels most natural in many situations.
        StreamBuilder.OfInt builder = Streams.intBuilder();
        for (int i = 0; i < 1000; i++) {
            if (isPrime(i)) {
                build.accept(i)
            }
        }
        IntStream stream = builder.build();
Though admittedly, streams built this way might benefit much from
Stream framework's support for parallelism.
An observation:
The call to build() at the end should always be put there, and exactly
once. After that point, the builder should no longer be used. In line
with these rules, I would prefer the following syntax:
        Stream<E> Streams.build((builder) -> {
            s1.forEach(builder);
            builder.accept(x);
            builder.accept(y);
            s2.forEach(builder);
        });
The implicit call to build() is inserted after the lambda returns,
after which point the builder is no longer available to be used. I
think it feels more natural, and a bit more Lambda-like.
Once again, thanks for giving us this great new tool!
Best
    
    
More information about the lambda-dev
mailing list