----- Mail original ----- > De: "Remi Forax" <fo...@univ-mlv.fr> > À: "Daniel Fuchs" <daniel.fu...@oracle.com> > Cc: "Patrick Concannon" <patrick.concan...@oracle.com>, "core-libs-dev" > <core-libs-dev@openjdk.java.net> > Envoyé: Jeudi 25 Juin 2020 23:46:08 > Objet: Re: RFR[8238286]: 'Add new flatMap stream operation that is more > amenable to pushing’
> ----- Mail original ----- >> De: "Daniel Fuchs" <daniel.fu...@oracle.com> >> À: "Remi Forax" <fo...@univ-mlv.fr>, "Patrick Concannon" >> <patrick.concan...@oracle.com> >> Cc: "core-libs-dev" <core-libs-dev@openjdk.java.net> >> Envoyé: Jeudi 25 Juin 2020 11:28:00 >> Objet: Re: RFR[8238286]: 'Add new flatMap stream operation that is more >> amenable >> to pushing’ > >> Hi Rémi, > > Hi Daniel, > >> >> On 25/06/2020 00:32, Remi Forax wrote: >>> I get that you want to keep Consumer<R> instead of Consumer<? super R> >>> because >>> Consumer<? super R> is not a valid target type for a lambda, but the >>> BiConsumer >>> should be able to take a ? super Consumer<R> instead of just Consumer<R>. >> >> Though I don't dispute that a strict application of the rules of >> covariance and contravariance would require to design a signature >> that accepts a `? super Consumer<R>` - how would you implement a >> BiConsumer with a signature that doesn't take a Consumer<R>? >> >> Such an implementation would be unable to push anything downstream >> without having to cast back the consumer to Consumer<R>. > > if i have already have a BiConsumer<Consumer<Object>, Object>, i would like to > be able to call Stream<String>.mapMulti() with that bi-consumer as argument. and obviously, i got it wrong, Consumer<Object> is not a super-type of Consumer<String>, it should be a BiConsumer<Consumer<?>, Object> or a BiConsumer<? super Consumer<String>, Object>, etc. > >> >> My personal preference would be to vote in favor of the simpler >> signature - which IMO is more readable and easier to understand. >> >> best regards, regards, Rémi > >> > > -- daniel