private static <S, T> T foldLeft(Collection<S> collection, F2<T, S, T> func, T value) { for (S item : collection) { value = func.f(value, item); } return value; }