JavaWeb

Java8新特性-002-四大内置核心函数式接口

2017-12-22  本文已影响4人  53b3f4658edc

四大内置核心函数式接口

函数式接口 参数类型 返回类型 用途
Consumer 消费型接口 T void 对类型为T的对象应用操 作,包含方法: void accept(T t)
Supplier 供给型接口 T 返回类型为T的对象,包 含方法:T get()
Function 函数型接口 T R 对类型为T的对象应用操 作,并返回结果。结果 是R类型的对象。包含方 法:R apply(T t)
Predicate 断定型接口 T boolean 确定类型为T的对象是否 满足某约束,并返回 boolean 值。包含方法 boolean test(T t)

其他接口

函数式接口 参数类型 返回类型 用途
BiFunction<T, U, R> T, U R 对类型为 T, U 参数应用操作,返回 R 类型的结果。包含方法为R apply(T t, U u);
UnaryOperator<T>(Function子接口) T T 对类型为T的对象进行一元运算,并返回T类型的结果。包含方法为T apply(T t);
BinaryOperator<T>(BiFunction 子接口) T, T T 对类型为T的对象进行二元运算,并返回T类型的结果。包含方法为T apply(T t1, T t2);
BiConsumer<T, U> T, U void 对类型为T, U 参数应用操作。包含方法为void accept(T t, U u)
ToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T> T int long double 分 别 计 算 int 、 long 、double、值的函数
IntFunction<R> LongFunction<R> DoubleFunction<R> int long double R 参数分别为int、long、double 类型的函数

测试代码

TestFourFunc.java

package java8.test;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

import org.junit.Test;

public class TestFourFunc {
    
    /**
     * Java8中内置4大函数接口
     *      1.Consumer<T>:消费型接口
     *          方法:void accept(T t);
     *          功能:给一个参数,完成一项操作,没有返回值。有去无回
     *      2.Supplier<T>:供给型
     *          方法:T get();
     *          功能:根据泛型参数,返回一个值给调用者。无中生有
     *      3.Function(T,R):函数型接口;
     *          方法:R apply(T t);
     *          功能:根据参数T,返回一个类型R。
     *      4.Predicate<T>:断言型接口
     *          方法:boolean test(T t);
     *          功能:对输入参数T,进行判断操作,返回一个boolean值
     */
    
    /**
     * 1.消费型接口:Consumer
     * java.util.function Interface Consumer<T>:
     * 参数类型
     *      T - 操作输入的类型
     * Functional Interface:
     *      这是一个功能界面,因此可以用作lambda表达式或方法引用的赋值对象。
     */
    @Test
    public void testConsumer() {
        /*
         * void accept(T t)
         *      对给定的参数执行此操作。
         * 参数
         *      t - 输入参数
         */
        Consumer<String> con = (str) -> System.out.println("你好," + str);
        con.accept("消费型接口~");
    }
    
    /**
     * 2.生产型接口:Supplier
     * @FunctionalInterface 
     * public interface Supplier<T>
     * 代表结果供应商。
     * 没有要求每次调用供应商时都会返回新的或不同的结果。
     * 这是一个functional interface的功能方法是get() 。
     * 从以下版本开始:
     * 1.8
     */
    @Test
    public void testSupplier() {
        /*
         * T get()
         *      获得结果。
         */
        Supplier<String> sup = () -> "生产型接口~";
        String string = sup.get();
        System.out.println(string);
    }
    
    /**
     * Function<T,R>:函数型接口
     *  java.util.function
     * Interface Function<T,R>
     * 参数类型
     *      T - 函数输入的类型
     *      R - 函数的结果类型
     */
    @Test
    public void testFunction() {
        /**
         * R apply(T t)
         *      将此函数应用于给定的参数。
         * 参数
         *      t - 函数参数
         * 结果
         *      功能结果
         */
        Function<Integer,String> func = (str) -> str + ",函数性接口~";
        String apply = func.apply(5);
        System.out.println(apply);
    }
    
    /**
     * Predicate<T>:断言型接口
     *  java.util.function
     * Interface Predicate<T>
     * 参数类型
     *      T - T输入的类型
     * Functional Interface:
     *      这是一个FunctionInterface,因此可以用作lambda表达式或方法引用的赋值对象。
     */
    @Test
    public void testPredicate() {
        /**
         * boolean test(T t)
         * 在给定的参数上评估这个谓词。
         * 参数
         *      t - 输入参数
         * 结果
         *      true如果输入参数匹配谓词,否则为 false
         */
        Predicate<Integer> pre = (a) -> a > 0;
        boolean test = pre.test(10);
        System.out.println("10 > 0 : " + test);
    }
}
微信公众号:JavaWeb架构师

其它

关注下方公众号,回复:Java8.code
完整教程PDF版本下载
上一篇下一篇

猜你喜欢

热点阅读