"flat" map method

Brian Goetz brian.goetz at oracle.com
Wed Jun 22 12:52:27 PDT 2011


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