"flat" map method

Stefan Springer stefan.springer1 at googlemail.com
Wed Jun 22 13:08:24 PDT 2011


Actually:

myList.flatMap(#{x ->
   do sth. with x getting y
   y.flatMap(#{x ->
      ...
  })
})

2011/6/22 Stefan Springer <stefan.springer1 at googlemail.com>

> 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>
>
>> 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