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

Java8中常用的函数式接口

函数接口函数描述符原始类型特化
PredicateT->booleanInt…
ConsumerT->voidInt…
FunctionT->RInt..IntTo..ToInt..
Supplier()->TBoolean..Int..
UnaryOperatorT->TInt
BinaryOperator(T,T)->TInt
BiPredicate(L,R)->boolean
BiConsumer(T,U)->voidObjInt..
BiFunction(T,U)->RToInt..

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

如果没有需要的接口,可以自行定义
比如我需要(T,U,R)->void,先定义一个函数式接口
/**
 * Created by LYJ on 2016/10/7.
 */
@FunctionalInterface
public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值