"flat" map method

Brian Goetz brian.goetz at oracle.com
Wed Jun 22 13:08:06 PDT 2011


OK, but let's get lambda/extension methods/map/reduce right first :)

On 6/22/2011 4:03 PM, Stefan Springer wrote:
> Yes, as I said I know you could use a map/reduce combination, but this
> gets cumbersome when you do this several level deep:
>
> myList.flatMap(#{x ->
>     x.flatMap(#{x ->
>        ...
>    })
> })
>
> 2011/6/22 Brian Goetz <brian.goetz at oracle.com
> <mailto:brian.goetz at oracle.com>>
>
>     This can be implemented by:
>
>       List<T> foo = ...
>       Mapper<T, List<U>> mapper = ...
>       Reducer<List<U>, List<U>> listJoiner = ...
>       List<U> flattened =
>           foo.map(mapper)
>              .reduce(Collections.emptyList(__), listJoiner);
>
>     If the intermediate form is a collection that admits an efficient
>     union operation, there's no reason this can't be efficient as well.
>
>
>     On 6/22/2011 3:43 PM, Stefan Springer wrote:
>
>         The "classical" map method on a Collection<T>  receives a
>         closure { T =>  U }
>         giving a Collection<U>. What I am missing in all discussions is
>         some kind of
>         a "flat" map method receiving a closure { T =>  Collection<T>  }
>         resulting in
>         a concatenation Collection<T>  of all individual Collection<T>
>           results for
>         each member of the original Collection<T>. I know that could be
>         realized by
>         combining the map method with a reduce method, but for easy
>         coding I think
>         such a "flatMap" method would be very nice. I know this pattern
>         from the
>         XML/SGML transformation language MetaMorphosis where such a
>         "flattening" is
>         very appropriate. Would vote for adding such a method for
>         collections in
>         Java 8.
>
>


More information about the lambda-dev mailing list