Survey on map/flatMap disambiguation

Sam Pullara spullara at gmail.com
Fri Mar 22 18:44:06 PDT 2013


I'm for putting in the mapToInt etc. Anything to stop type inference from slowing me down. Most of the issues I run into when building things are mismatches between various overloads.

Sam

On Mar 22, 2013, at 1:39 PM, Remi Forax <forax at univ-mlv.fr> wrote:

> On 03/22/2013 07:14 PM, Brian Goetz wrote:
>> There was no further discussion on this thread, so given that there was already a poll in favor, and little followup afterwards, I'm inclined to push this change.
> 
> As Joe said, filter/map/reduce are common concepts,
> we should keep them simple.
> 
> flatMap doesn't fall in that category so adding several overloads to help the compiler
> is just something necessary not something which is a design that we should apply
> on map.
> 
> please, we should try to keep the common operation simple if we can.
> 
> Rémi
> 
>> 
>> 
>> On 3/19/2013 11:22 AM, Brian Goetz wrote:
>>> Thanks for writing up your concerns all in one place.
>>> 
>>>> 1. Performance gotchas?
>>> 
>>> Of these, I think this is the worst of the concerns.  However, I also
>>> think its not as bad as it sounds.  When a user hits ctrl-space in the
>>> IDE, they'll see (close to each other) all the mapToXxx forms, which has
>>> actually a lot of educational value.  [1]
>>> 
>>> Secondly, while boxed performance is definitely much worse than
>>> non-boxed, for small streams (and most collections are small), it might
>>> not make a difference anyway.  I've definitely had the experience many
>>> many times of discovering "egregious" performance "bugs" like this that
>>> turned out to have no effect on actual business-relevant performance
>>> metrics, because all the cost was in the { XML parsing, database access,
>>> network latency, crypto, etc }.  For those cases where it does make a
>>> difference, profiling will disclose this immediately.  So its a gotcha,
>>> but not a disaster.
>>> 
>>> So I think its a gotcha but nothing so bad that this makes the
>>> difference for me.
>>> 
>>>> 2. Consistency.  What about other similar methods?
>>>> 
>>>> My main concern is that this change will (or should?) cascade to other
>>>> methods, and, in the end, a patch that need only be applied to flatMap
>>>> ripples through the entire API.
>>> 
>>> I did a quick look and didn't see any other obvious examples of this
>>> pattern, where we've overloaded methods for all the X-to-Y stream
>>> conversions.  Did you find any ripples I missed?
>>> 
>>>> 3. Breaks map/reduce functional feel?
>>>> 
>>>> The other concern that I stated previously is that this mars the
>>>> familiar map/reduce functional feel, without helping enough with the
>>>> usability or readability.  Either way, an IDE will be indispensable.
>>> 
>>> This is obviously subjective but for me it felt OK.
>>> 
>>> 
>>> 
>>> [1] Educating people that there are multiple stream shapes, whose
>>> methods are similar but not exactly the same, is important. Calling all
>>> the methods "map" may make people believe that there's a sum() method on
>>> Stream, and be surprised when there is not.  But .mapToInt(...).sum()
>>> makes it more obvious what is going on here, which is arguably a plus.
>>> 
> 



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