fj.function.Integers Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of functionaljava Show documentation
Show all versions of functionaljava Show documentation
Functional Java is an open source library that supports closures for the Java programming language
package fj.function;
import fj.F;
import fj.F2;
import static fj.Function.curry;
import fj.Monoid;
import fj.data.List;
import fj.data.Option;
import static fj.data.Option.some;
import static fj.data.Option.none;
import static fj.Semigroup.intAdditionSemigroup;
import static fj.Semigroup.intMultiplicationSemigroup;
import static java.lang.Math.abs;
/**
* Curried functions over Integers.
*
* @version %build.number%
*/
public final class Integers {
private Integers() {
throw new UnsupportedOperationException();
}
/**
* Curried Integer addition.
*/
public static final F> add = intAdditionSemigroup.sum();
/**
* Curried Integer multiplication.
*/
public static final F> multiply = intMultiplicationSemigroup.sum();
/**
* Curried Integer subtraction.
*/
public static final F> subtract = curry(new F2() {
public Integer f(final Integer x, final Integer y) {
return x - y;
}
});
/**
* Negation.
*/
public static final F negate = new F() {
public Integer f(final Integer x) {
return x * -1;
}
};
/**
* Absolute value.
*/
public static final F abs = new F() {
public Integer f(final Integer x) {
return abs(x);
}
};
/**
* Remainder.
*/
public static final F> remainder = curry(new F2() {
public Integer f(final Integer a, final Integer b) {
return a % b;
}
});
/**
* Power.
*/
public static final F> power = curry(new F2() {
public Integer f(final Integer a, final Integer b) {
return (int) StrictMath.pow(a, b);
}
});
/**
* Evenness.
*/
public static final F even = new F() {
public Boolean f(final Integer i) {
return i % 2 == 0;
}
};
/**
* Sums a list of integers.
*
* @param ints A list of integers to sum.
* @return The sum of the integers in the list.
*/
public static int sum(final List ints) {
return Monoid.intAdditionMonoid.sumLeft(ints);
}
/**
* Returns the product of a list of integers.
*
* @param ints A list of integers to multiply together.
* @return The product of the integers in the list.
*/
public static int product(final List ints) {
return Monoid.intMultiplicationMonoid.sumLeft(ints);
}
/**
* A function that converts strings to integers.
*
* @return A function that converts strings to integers.
*/
public static F> fromString() {
return new F>() {
public Option f(final String s) {
try { return some(Integer.valueOf(s)); }
catch (final NumberFormatException ignored) {
return none();
}
}
};
}
/**
* A function that returns true if the given integer is greater than zero.
*/
public static final F gtZero = new F() {
public Boolean f(final Integer i) {
return i > 0;
}
};
/**
* A function that returns true if the given integer is greater than or equal to zero.
*/
public static final F gteZero = new F() {
public Boolean f(final Integer i) {
return i >= 0;
}
};
/**
* A function that returns true if the given integer is less than zero.
*/
public static final F ltZero = new F() {
public Boolean f(final Integer i) {
return i < 0;
}
};
/**
* A function that returns true if the given integer is less than or equal to zero.
*/
public static final F lteZero = new F() {
public Boolean f(final Integer i) {
return i <= 0;
}
};
}