No 'fold left' without a combiner ?

Remi Forax forax at univ-mlv.fr
Sun Sep 8 09:18:26 PDT 2013


Did I say that I will send you an email to the EG lists each time I will 
be annoyed by visibility of lambda parameter rule ?

ArrayList<Advice> advices = ...
AnnotatedElement annotatedElement = ...
MethodHandle mh = advices.stream().reduce(impl, (mh, advice) -> 
advice.chain(annotatedElement, mh), null);

In fact, there is another issue, (the real reason of this email), this 
code throws a NPE at runtime because I use null as combiner.
It seems there is no way to express a left fold on values (different 
from T) when the values can not be combined.

I've fixed the issue by writing,
   MethodHandle target = advices.stream().reduce(impl,
       (mh, advice) -> advice.chain(annotatedElement, mh),
       (_1, _2) -> { throw new AssertionError(); } );
but it's clearly ugly.

cheers,
Rémi



More information about the lambda-spec-observers mailing list