All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.davidmoten.rx.Functions Maven / Gradle / Ivy

package com.github.davidmoten.rx;

import java.util.Comparator;

import rx.Observable;
import rx.functions.Func0;
import rx.functions.Func1;
import rx.functions.Func2;

public final class Functions {

    private Functions() {
        // prevent instantiation
    }

    public static  Func1 identity() {
        return new Func1() {
            @Override
            public T call(T t) {
                return t;
            }
        };
    }

    public static  Func1 alwaysTrue() {
        return new Func1() {
            @Override
            public Boolean call(T t) {
                return true;
            }
        };
    }

    public static  Func1 alwaysFalse() {
        return new Func1() {
            @Override
            public Boolean call(T t) {
                return false;
            }
        };
    }

    public static  Func1 constant(final R r) {
        return new Func1() {
            @Override
            public R call(T t) {
                return r;
            }
        };
    }

    public static  Func0 constant0(final T t) {
        return new Func0() {

            @Override
            public T call() {
                return t;
            }
        };
    }

    public static  Func1 not(final Func1 f) {
        return new Func1() {
            @Override
            public Boolean call(T t) {
                return !f.call(t);
            }
        };
    }

    public static  Func1> just() {
        return new Func1>() {
            @Override
            public Observable call(T t) {
                return Observable.just(t);
            }
        };
    }

    /**
     * Returns a Func2 that adds numbers. Useful for Observable.reduce but not
     * particularly performant as it does instanceOf checks.
     * 
     * @param 
     *            generic type of Number being added
     * @return Func2 that adds numbers
     */
    public static  Func2 add() {
        return new Func2() {
            @SuppressWarnings("unchecked")
            @Override
            public T call(T a, T b) {
                if (a instanceof Integer)
                    return (T) (Number) (a.intValue() + b.intValue());
                else if (a instanceof Long)
                    return (T) (Number) (a.longValue() + b.longValue());
                else if (a instanceof Double)
                    return (T) (Number) (a.doubleValue() + b.doubleValue());
                else if (a instanceof Float)
                    return (T) (Number) (a.floatValue() + b.floatValue());
                else if (a instanceof Byte)
                    return (T) (Number) (a.byteValue() + b.byteValue());
                else if (a instanceof Short)
                    return (T) (Number) (a.shortValue() + b.shortValue());
                else
                    throw new RuntimeException("not implemented");
            }
        };
    }

    public static  Func2 collectStats() {
        return new Func2() {

            @Override
            public Statistics call(Statistics s, T t) {
                return s.add(t);
            }
        };
    }

    public static  Func2 toFunc2(final Comparator comparator) {
        return new Func2() {
            @Override
            public Integer call(T t1, T t2) {
                return comparator.compare(t1, t2);
            }
        };
    }

    public static  Comparator toComparator(final Func2 f) {
        return new Comparator() {
            @Override
            public int compare(T a, T b) {
                return f.call(a, b);
            }
        };
    }

    public static  Func2 alwaysTrue2() {
        return new Func2() {

            @Override
            public Boolean call(T t1, R t2) {
                return true;
            }
        };
    }

    public static  Func2 alwaysFalse2() {
        return new Func2() {

            @Override
            public Boolean call(T t1, R t2) {
                return false;
            }
        };
    }

    public static  Func1 isNull() {
        return new Func1() {

            @Override
            public Boolean call(T t) {
                return t == null;
            }
        };
    }

    public static  Func1 isNotNull() {
        return new Func1() {

            @Override
            public Boolean call(T t) {
                return t != null;
            }
        };
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy