// Path: func/src/main/java/com/mcxiaoke/next/func/functions/Func1.java
// public interface Func1<T, R> extends Function {
// 
//     R call(T t);
// 
// 
// }
// 
// Path: func/src/main/java/com/mcxiaoke/next/func/functions/Predicate.java
// public interface Predicate<T> {
// 
//     /**
//      * Evaluates this predicate on the given argument.
//      *
//      * @param t the input argument
//      * @return {@code true} if the input argument matches the predicate,
//      * otherwise {@code false}
//      */
//     boolean accept(T t);
// }


import com.mcxiaoke.next.func.functions.Action1;
import com.mcxiaoke.next.func.functions.Func1;
import com.mcxiaoke.next.func.functions.Func2;
import com.mcxiaoke.next.func.functions.Predicate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
            }
        }
        return zipped;
    }

    public static <T, R> R reduce(final Func2<R, ? super T, R> func2,
                                  final Iterable<? extends T> iterable,
                                  final R initializer) {
        R r = initializer;
        final Iterator<? extends T> it = iterable.iterator();
        while (it.hasNext()) {
            r = func2.call(r, it.next());
        }
        return r;
    }

    @SuppressWarnings("unchecked")
    public static <T, R> R reduce(final Func2<R, ? super T, R> func2,
                                  final Iterable<? extends T> iterable) {
        R r = null;
        final Iterator<? extends T> it = iterable.iterator();
        if (it.hasNext()) {
            r = (R) it.next();
            while (it.hasNext()) {
                r = func2.call(r, it.next());
            }
        }
        return r;
    }

// Path: func/src/main/java/com/mcxiaoke/next/func/functions/Func1.java
// public interface Func1<T, R> extends Function {
// 
//     R call(T t);
// 
// 
// }
// 
// Path: func/src/main/java/com/mcxiaoke/next/func/functions/Predicate.java
// public interface Predicate<T> {
// 
//     /**
//      * Evaluates this predicate on the given argument.
//      *
//      * @param t the input argument
//      * @return {@code true} if the input argument matches the predicate,
//      * otherwise {@code false}
//      */
//     boolean accept(T t);
// }


// Path: func/src/main/java/com/mcxiaoke/next/func/Fn.java
import com.mcxiaoke.next.func.functions.Action1;
import com.mcxiaoke.next.func.functions.Func1;
import com.mcxiaoke.next.func.functions.Func2;
import com.mcxiaoke.next.func.functions.Predicate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

            }
        }
        return zipped;
    }

    public static <T, R> R reduce(final Func2<R, ? super T, R> func2,
                                  final Iterable<? extends T> iterable,
                                  final R initializer) {
        R r = initializer;
        final Iterator<? extends T> it = iterable.iterator();
        while (it.hasNext()) {
            r = func2.call(r, it.next());
        }
        return r;
    }

    @SuppressWarnings("unchecked")
    public static <T, R> R reduce(final Func2<R, ? super T, R> func2,
                                  final Iterable<? extends T> iterable) {
        R r = null;
        final Iterator<? extends T> it = iterable.iterator();
        if (it.hasNext()) {
            r = (R) it.next();
            while (it.hasNext()) {
                r = func2.call(r, it.next());
            }
        }
        return r;
    }

    public static <T, R> void map(Func1<? super T, ? extends R> func, Collection<T> from, Collection<R> to) {