Generators

Brian Goetz brian.goetz at oracle.com
Thu Jan 3 12:50:17 PST 2013


Things like

int sumOfFirstHundredPrimes =
   ints().filter(isPrime()).limit(100).sum();

where you don't know how many input elements you'll have to examine.


On 1/3/2013 3:44 PM, Sam Pullara wrote:
> These look pretty reasonable to me. What is the motivation for ints()?
>
> Sam
>
> On Thu, Jan 3, 2013 at 11:49 AM, Brian Goetz <brian.goetz at oracle.com
> <mailto:brian.goetz at oracle.com>> wrote:
>
>     I'm looking over our generators.  Currently we have:
>
>        repeat(T)
>        repeat(n, T)
>        repeatedly(Supplier<T>)
>        repeatedly(n, Supplier<T>)
>        iterate(T, UnaryOperator<T>)
>        cycle(Iterable)
>
>     I'd like to pare this down a lot.  Paul and I have been discussing
>     techniques for making limit() more efficient, at which point the
>     first four can collapse to
>
>        generate(Supplier<T>)
>
>     since you can simulate repeat(T) with generate(() -> T) and the
>     limited versions with generate().limit().
>
>     That leaves us with
>
>        iterate(T, UnaryOperator<T>)
>        cycle(Iterable)
>
>     and I'm thinking cycle doesn't pull its weight either.  If we took
>     that out, we'd be down to the pleasantly small set of:
>
>        generate(Supplier<T>)
>        iterate(T, UnaryOperator<T>)
>
>     For integer generators, we have
>
>        range(from, to)
>
>     and I think we should add
>
>        ints() -> sugar for range(0, MAX_INT)
>
>     (Or should ints() be truly infinite, wrapping around?)
>
>


More information about the lambda-libs-spec-observers mailing list