
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 super T> comparator) {
return new Func2() {
@Override
public Integer call(T t1, T t2) {
return comparator.compare(t1, t2);
}
};
}
public static Comparator toComparator(final Func2 super T, ? super T, Integer> 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