Replicator (as in DNA)

Sent from my iPhone

> On Jun 18, 2018, at 6:49 PM, James Laskey <james.las...@oracle.com> wrote:
> 
> Bifurcate 
> 
> Sent from my iPhone
> 
>> On Jun 18, 2018, at 6:29 PM, Brian Goetz <brian.go...@oracle.com> wrote:
>> 
>> "bisecting" sounds like it sends half the elements to one collector and half 
>> to the other ...
>> 
>> "tee" might be a candidate, though it doesn't follow the `ing convention.  
>> "teeing" sounds dumb.
>> 
>> 
>> 
>>> On 6/15/2018 7:36 PM, Paul Sandoz wrote:
>>> Hi Tagir,
>>> 
>>> This is looking good.
>>> 
>>> My current favorite name for the factory method is “bisecting” since we are 
>>> dividing the collector into two collectors, the results of which are then 
>>> merged.
>>> Suggested first paragraph of the factory method:
>>> 
>>>  "Returns a collector that passes the input elements to two specified 
>>> collectors and merges their results with the specified merge function.”
>>> 
>>> Paul.
>>> 
>>>> On Jun 15, 2018, at 4:26 AM, Tagir Valeev <amae...@gmail.com> wrote:
>>>> 
>>>> Hello!
>>>> 
>>>> I created a preliminary webrev of my own implementation (no testcases yet):
>>>> http://cr.openjdk.java.net/~tvaleev/patches/pairing/webrev/
>>>> If anybody wants to sponsor my implementation, I will happily log an issue 
>>>> and write tests.
>>>> 
>>>> The name "pairing" was invented by me, but as I'm not a native English 
>>>> speaker I cannot judge whether it's optimal, so better ideas are welcome.
>>>> Also I decided to remove accumulator types from public type variables. 
>>>> They do not add anything to type signature, only clutter it
>>>> increasing the number of type parameters from 4 to 6. I think it was a 
>>>> mistake to expose the accumulator type parameter in other cascading 
>>>> collectors
>>>> like filtering(), collectingAndThen(), groupingBy(), etc. I'm not 
>>>> insisting though, if you feel that conformance to existing collectors is
>>>> more important than simplicity.
>>>> 
>>>> With best regards,
>>>> Tagir Valeev.
>>>> 
>>>>> On Fri, Jun 15, 2018 at 5:05 AM Brian Goetz <brian.go...@oracle.com> 
>>>>> wrote:
>>>>> 
>>>>> Well, I don't see the need to pack the two results into a Map.Entry
>>>>> (or any similar) container as a drawback.
>>>> From an "integrity of the JDK APIs" perspective, it is unquestionably a
>>>> drawback.  These items are not a Key and an associated Value in a Map;
>>>> it's merely pretending that Map.Entry really means "Pair".  There's a
>>>> reason we don't have a Pair class in the JDK (and no, let's not reopen
>>>> that now); using something else as a Pair proxy that is supposed to have
>>>> specific semantics is worse. (It's fine to do this in your own code, but
>>>> not in the JDK. Different standards for code that has different audiences.)
>>>> 
>>>> Tagir's proposed sidestepping is nice, and it will also play nicely with
>>>> records, because then you can say:
>>>> 
>>>>      record NameAndCount(String name, int count);
>>>> 
>>>>      stream.collect(pairing(collectName, collectCount, NameAndCount::new));
>>>> 
>>>> and get a more properly abstract result out.  And its more in the spirit
>>>> of existing Collectors.  If you want to use Map.Entry as an
>>>> _implementation detail_, that's fine.
>>>> 
>>>> I can support this form.
>>>> 
>>>>> I also don't see a larger abstraction like BiStream as a natural fit
>>>>> for a similar thing.
>>>> I think the BiStream connection is mostly tangential.  We tried hard to
>>>> support streams of (K,V) pairs when we did streams, as Paul can attest,
>>>> but it was a huge complexity-inflater and dropping this out paid an
>>>> enormous simplification payoff.
>>>> 
>>>> With records, having streams of tuples will be simpler to represent, but
>>>> no more performant; it will take until we get to value types and
>>>> specialized generics to get the performance we want out of this.
>>>> 
>>>> 
>> 
> 

Reply via email to