Java 8 in Action (1) -- 函数式接口

来源:互联网 发布:淘宝联盟是骗局吗 编辑:程序博客网 时间:2024/05/29 17:17

Java8中常用的函数式接口

函数接口 函数描述符 原始类型特化 Predicate T->boolean Int… Consumer T->void Int… Function T->R Int..IntTo..ToInt.. Supplier ()->T Boolean..Int.. UnaryOperator T->T Int BinaryOperator (T,T)->T Int BiPredicate (L,R)->boolean BiConsumer (T,U)->void ObjInt.. BiFunction (T,U)->R ToInt..

上表中最后一列中的Int可以替换为Long和Doublera然后再加上函数接口名, 原始类型特化基本上都是Int, Long, Double 开头, BooleanSupplier, BiPredicate没有特化类型

如果没有需要的接口,可以自行定义

比如我需要(T,U,R)->void,先定义一个函数式接口
/** * Created by LYJ on 2016/10/7. */@FunctionalInterfacepublic interface MyFunction<T,U,R>{    void excute(T t,U u,R r);}
/** * Created by LYJ on 2016/10/7. */public class Main {    public static void main(String[] args) {        //为了简化,我们值判断 Integer转成字符串和String值是否相等,没有用到Double        //可以看到下面这行代码用了行为参数化        //第4个参数,将代码当作参数传递给函数式接口去执行,更灵活更简洁        int result= goExcute(1,"1",0.1,(Integer a,String b,Double c)->(a+"").equals(b));        System.out.println(result + "      --------- result    --- Main.main\n");    }    /**     * @param t 在这个例子中 代表Integer,因为int是基础类型所以不行     * @param u 代表String     * @param r 代表Double     * @param f 我们自定义的函数式接口,传递代码     * @param <T>     * @param <U>     * @param <R>     * @return     */    public static <T,U,R> int goExcute(T t,U u,R r,MyFunction<T,U,R> f){        if(f.excute(t,u,r)){            return 1;        }        else            return 0;    }}

我们可以通过上面的方式自定义一个函数式接口

0 0
原创粉丝点击