FlatMapper

Brian Goetz brian.goetz at oracle.com
Fri Feb 15 10:48:24 PST 2013


So it seems the choice is:

  - Keep this tied to flatMap and keep it in JUS.  Advantage: makes the 
complicated flatMap(FlatMapper) operation easier to understand.

  - Abstract this into a general "map to multiple values and dump 
results into a Consumer" type, move to JUF, ane rename to something like 
"MultiFunction".  Advantage: more future flexibility; Disadvantage: 
mostly guessing about what we might want in the future.

I lean towards the first.

In which case the remaining decision is: what to name the method.

Maybe:

   mapAndFlattenInto

?

On 2/14/2013 4:33 PM, Joe Bowbeer wrote:
> I'm not opposed to explode, but I think it would be better to find a
> verb that is related to flattening.  Extrude is better in that regard
> than explode.
>
> extrudeInto
> mapAndExtrude
>
> On the downside, 'explode' has more hacker cred than 'extrude'.
>
>   --Joe
>
>
> On Thu, Feb 14, 2013 at 12:56 PM, Brian Goetz <brian.goetz at oracle.com
> <mailto:brian.goetz at oracle.com>> wrote:
>
>     OK, so far we have:
>       - Joe asks for a better method name -- no suggestions other than
>     mapAndFlatten
>       - No consensus on whether this goes into JUS or JUF.
>
>
>
>
>     On 2/12/2013 1:41 PM, Brian Goetz wrote:
>
>         Here's where things have currently landed with FlatMapper --
>         this is a
>         type in java.util.stream, with nested specializations.
>
>         Full bikeshed season is now open.  Are we OK with the name
>         explodeInto()?  Is this general enough to join the ranks of
>         Function and
>         Supplier as top-level types in java.util.function?
>
>         @FunctionalInterface
>         public interface FlatMapper<T, U> {
>               void explodeInto(T element, Consumer<U> sink);
>
>               @FunctionalInterface
>               interface ToInt<T> {
>                   void explodeInto(T element, IntConsumer sink);
>               }
>
>               @FunctionalInterface
>               interface ToLong<T> {
>                   void explodeInto(T element, LongConsumer sink);
>               }
>
>               @FunctionalInterface
>               interface ToDouble<T> {
>                   void explodeInto(T element, DoubleConsumer sink);
>               }
>
>               @FunctionalInterface
>               interface OfIntToInt {
>                   void explodeInto(int element, IntConsumer sink);
>               }
>
>               @FunctionalInterface
>               interface OfLongToLong {
>                   void explodeInto(long element, LongConsumer sink);
>               }
>
>               @FunctionalInterface
>               interface OfDoubleToDouble {
>                   void explodeInto(double element, DoubleConsumer sink);
>               }
>         }
>
>


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