package org.example.functional;
import static fj.data.List.list;
import fj.F;
import fj.data.List;
public class Main {
private static final List<Integer> numbers = list(1, 2, 3, 4, 5);
public static void main(String[] args) {
List<Integer> c = numbers.map(new F<Integer, Integer>() {
public Integer f(Integer arg) {
return arg * arg;
}
});
System.out.println(makeString(c, ",")); // 1,4,9,16,25
final int b = numbers.foldLeft(new F<Integer, F<Integer, Integer>>() {
public F<Integer, Integer> f(final Integer i) {
return new F<Integer, Integer>() {
public Integer f(final Integer j) {
return i + j;
}
};
}
}, 0);
System.out.println(b); //15
List<Integer> gt3 = numbers.filter(new F<Integer, Boolean>() {
public Boolean f(Integer arg) {
return arg > 3;
}
});
System.out.println(makeString(gt3, ",")); // 4,5
}
static String makeString(final List<Integer> list, final String separator) {
if (list != null && !list.isEmpty())
return subMakeString(list, separator, new StringBuilder())
.toString();
else
return "";
}
private static StringBuilder subMakeString(final List<Integer> ar,
final String separator, StringBuilder sb) {
sb.append(ar.head().toString());
if (ar.tail().isEmpty())
return sb;
else {
sb.append(separator);
return subMakeString(ar.tail(), separator, sb);
}
}
}