fj.function.Doubles Maven / Gradle / Ivy
package fj.function;
import fj.F;
import fj.F2;
import fj.Monoid;
import fj.data.List;
import fj.data.Option;
import static fj.Function.curry;
import static fj.Semigroup.doubleAdditionSemigroup;
import static fj.Semigroup.doubleMultiplicationSemigroup;
import static fj.data.Option.none;
import static fj.data.Option.some;
import static java.lang.Math.abs;
/**
* Curried functions over Doubles.
*
* @version %build.number%
*/
public final class Doubles {
private Doubles() {
throw new UnsupportedOperationException();
}
/**
* Curried Double addition.
*/
public static final F> add = doubleAdditionSemigroup.sum();
/**
* Curried Double multiplication.
*/
public static final F> multiply = doubleMultiplicationSemigroup.sum();
/**
* Curried Double subtraction.
*/
public static final F> subtract = curry((x, y) -> x - y);
/**
* Negation.
*/
public static final F negate = x -> x * -1;
/**
* Absolute value.
*/
public static final F abs = x -> abs(x);
/**
* Remainder.
*/
public static final F> remainder = curry((a, b) -> a % b);
/**
* Power.
*/
public static final F> power = curry((a, b) -> StrictMath.pow(a, b));
/**
* Evenness.
*/
public static final F even = i -> i % 2 == 0;
/**
* Sums a list of doubles.
*
* @param doubles A list of doubles to sum.
* @return The sum of the doubless in the list.
*/
public static double sum(final List doubles) {
return Monoid.doubleAdditionMonoid.sumLeft(doubles);
}
/**
* Returns the product of a list of doubles.
*
* @param doubles A list of doubles to multiply together.
* @return The product of the doubles in the list.
*/
public static double product(final List doubles) {
return Monoid.doubleMultiplicationMonoid.sumLeft(doubles);
}
/**
* A function that converts strings to doubles.
*
* @return A function that converts strings to doubles.
*/
public static F> fromString() {
return s -> {
try { return some(Double.valueOf(s)); }
catch (final NumberFormatException ignored) {
return none();
}
};
}
/**
* A function that returns true if the given double is greater than zero.
*/
public static final F gtZero = i -> Double.compare(i, 0) > 0;
/**
* A function that returns true if the given double is greater than or equal to zero.
*/
public static final F gteZero = i -> Double.compare(i, 0) >= 0;
/**
* A function that returns true if the given double is less than zero.
*/
public static final F ltZero = i -> Double.compare(i, 0) < 0;
/**
* A function that returns true if the given double is less than or equal to zero.
*/
public static final F lteZero = i -> Double.compare(i, 0) <= 0;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy