JAva 8関数式プログラミング

11106 ワード

JAvaでの関数式プログラミング

/**
 *      demo
 */
public class FunctionalTest {

    static void testCompare1(int src, double limit) {
        double d= src*src+src * 10.0;
        if (d < limit){
            System.out.println("Success: " + d);
        }else {
            System.out.println("Failure: " + d);
        }
    }

    /**
     *                   (x*x+10*x limit),         
     * @param src x
     * @param limit   
     */
    static void testCompare2(int src, double limit) {

        //   
        Supplier<Integer> source = () -> {
            return src;
        };
        //      
        Function<Integer, Double> process = i -> i*i+i * 10.0;

        //   
        Predicate<Double> condition = num -> {
            //System.out.println("Test if	" + num + "	is smaller than " + limit);
            return num < limit;
        };
        //   
        Consumer<Double> success = d -> System.out.println("Success: " + d);
        Consumer<Double> failure = d -> System.out.println("Failure: " + d);

        //           
        calculate(source, process, condition, success, failure);
    }

    /**
     *               
     * @param source
     * @param process
     * @param condition
     * @param success
     * @param failure
     */
    static void calculate(Supplier<Integer> source, Function<Integer, Double> process, Predicate<Double> condition, Consumer<Double> success, Consumer<Double> failure) {
        int i = source.get();
        double res = process.apply(i);
        if (condition.test(res)) {
            success.accept(res);
        } else {
            failure.accept(res);
        }
    }

    public static void main(String[] args) {

        System.out.println("====    =====");
        testCompare1(2,10);
        System.out.println("====     =====");
        testCompare2(2,10);
    }
}


まずコードを投げ出して,後で説明する