Mercurial > hg > Members > tatsuki > functionaljava-master > core
view src/main/java/fj/function/Doubles.java @ 0:fe80c1edf1be
add getLoop
author | tatsuki |
---|---|
date | Fri, 20 Mar 2015 21:04:03 +0900 |
parents | |
children |
line wrap: on
line source
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<Double, F<Double, Double>> add = doubleAdditionSemigroup.sum(); /** * Curried Double multiplication. */ public static final F<Double, F<Double, Double>> multiply = doubleMultiplicationSemigroup.sum(); /** * Curried Double subtraction. */ public static final F<Double, F<Double, Double>> subtract = curry(new F2<Double, Double, Double>() { public Double f(final Double x, final Double y) { return x - y; } }); /** * Negation. */ public static final F<Double, Double> negate = new F<Double, Double>() { public Double f(final Double x) { return x * -1; } }; /** * Absolute value. */ public static final F<Double, Double> abs = new F<Double, Double>() { public Double f(final Double x) { return abs(x); } }; /** * Remainder. */ public static final F<Double, F<Double, Double>> remainder = curry(new F2<Double, Double, Double>() { public Double f(final Double a, final Double b) { return a % b; } }); /** * Power. */ public static final F<Double, F<Double, Double>> power = curry(new F2<Double, Double, Double>() { public Double f(final Double a, final Double b) { return StrictMath.pow(a, b); } }); /** * Evenness. */ public static final F<Double, Boolean> even = new F<Double, Boolean>() { public Boolean f(final Double i) { return 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<Double> 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<Double> doubles) { return Monoid.doubleMultiplicationMonoid.sumLeft(doubles); } /** * A function that converts strings to doubles. * * @return A function that converts strings to doubles. */ public static F<String, Option<Double>> fromString() { return new F<String, Option<Double>>() { public Option<Double> f(final String 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<Double, Boolean> gtZero = new F<Double, Boolean>() { public Boolean f(final Double i) { return 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<Double, Boolean> gteZero = new F<Double, Boolean>() { public Boolean f(final Double i) { return Double.compare(i, 0) >= 0; } }; /** * A function that returns true if the given double is less than zero. */ public static final F<Double, Boolean> ltZero = new F<Double, Boolean>() { public Boolean f(final Double i) { return 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<Double, Boolean> lteZero = new F<Double, Boolean>() { public Boolean f(final Double i) { return Double.compare(i, 0) <= 0; } }; }