Arrays methods

Brian Goetz brian.goetz at oracle.com
Sun Mar 10 17:07:07 PDT 2013


Here's a summary of stream-related methods that are currently in 
java.util.Arrays.  All have one-line implementations.

Object/int/long/double versions of:
   stream(T[] array)
   stream(T[] array, int start, int end)
   parallelStream(T[])
   parallelStream(T[] array, int start, int end)
   spliterator(T[] array)
   spliterator(T[] array, int start, int end)

Object/all primitive versions of:
   indices(array)

The first group seems basically required but the last group seems like 
we can get rid of it.  (It expands to Streams.intRange(0, array.length)).

What we're missing are methods for in-place parallel mutation of arrays, 
such as:

   Arrays.fill(T[] array, int -> T generator)
   Arrays.fillParallel(T[] array, int -> T generator)

One can easily simulate these with

   intRange(0, length).forEach(i -> { array[i] = generator.apply(i); })

but (a) this is harder to read than the above fill forms and (b) it is 
less obvious how to discover this idiom.  The indices was an attempt to 
make that easier but is not really any better:

   Arrays.indices(array).forEach(i -> { array[i] = generator.apply(i); })

So I think we should ditch the indices() methods but consider adding 
array fill methods.  There'd be at least 9 x 2 (array types x {seq,par}) 
and possibly x 2 more (whole array, subarray).  Though they're all 
trivial.



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