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());
October 31st, 2008 at 2:57 am
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)
);