Project Euler Problem 2 Functional Java

Project Euler Problem 2 using Functional Java:

import fj.data.Stream;
import fj.P1;
import fj.F2;
import static fj.function.Integers.even;
import static fj.pre.Ord.intOrd;
import static fj.pre.Monoid.intAdditionMonoid;
import static fj.data.Stream.cons;
import static fj.Function.curry;
 
...
 
Stream<Integer> fibs = new F2<Integer, Integer, Stream<Integer>>() {
  public Stream<Integer> f(final Integer a, final Integer b) {
    return cons(a, P1.curry(curry(this).f(b)).f(a + b));
  }
}.f(1, 2);
 
final int problem2 = intAdditionMonoid.sumLeft(fibs.takeWhile(intOrd.isLessThan(1000001)).filter(even).toList());

One Response to “Project Euler Problem 2 Functional Java”

  1. Vladimir Says:

    I was always wondering why no one is using symbol “$” for function application when creating a lambda supporting library for Java.


    Function<Long, String> longToStr = StringUtils.toStr();
    Function<Long, Boolean> hasNo245680 = new Function<Long, Boolean>(){
        public Boolean $(Long l) {
            String s = l.toString();
                return s.indexOf('2') == -1
                    && s.indexOf('4') == -1
                    && s.indexOf('5') == -1
                    && s.indexOf('6') == -1
                    && s.indexOf('8') == -1
                    && s.indexOf('0') == -1;
        }
    };
    primes = ListUtils.<Long>filter().$(hasNo245680).$(primes);
    Set<String> primesSet = new HashSet<String>(
        ListUtils.<Long, String> map().$(longToStr).$(primes)
    );

Leave a Reply