jdk1.8-函数式接口

函数式接口

什么是函数式(Functional)

  • 只包含一个抽象方法的接口,称为函数式接口
  • 你可以通过lambda 表达式来创建该接口对象。(若lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行生命)
  • 我们可以在一个接口上使用@FunctionalInterface 注解,这样做可以检查他是否是一个函数式接口,同时javadoc也会包含一条生命,说明这个接口是一个函数式接口
  • 在java,util.function包下定义了java8的丰富函数式接口

如何理解函数式接口

  • java为了应对市面上更多语言的挑战与更广泛的技术要求,所以java 不但要支持oop还要支持oof(面对函数编程)。Spring也对此作出了响应调整
  • lambda表达式就是一个函数式接口的实例。
  • 所有匿名实现类标识的现在都可以用lambda来实现

java内置四大核心函数式接口

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

举例





public class lambda2 {

     @Test
     public void test1(){

         happytime(500, new Consumer<Double>() {
             @Override
             public void accept(Double aDouble) {
                 System.out.println("好好学习,天天向上.学费:" +aDouble);
             }
         });
         happytime(500,moeny->  System.out.println("好好学习,天天向上。学费:" +moeny));

     }

    public void happytime(double moeny,Consumer<Double> consumer){
        consumer.accept(moeny);
    }

    @Test
    public void test2(){
        List<String> list= Arrays.asList("北京","上海","广州");
        ArrayList arrlist = filterString(list, new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.contains("广州");
            }
        });
        System.out.println(arrlist);

        ArrayList arrlist1 = filterString(list,s->s.contains("北京"));

        System.out.println(arrlist1);

    }
    //根据给顶规则 过滤集合中的字符串,此规则Predicate 定义
    public ArrayList filterString(List<String> list, Predicate<String> pre){
        ArrayList<String> filterList=new ArrayList<>();
        for (String s:list) {
            if (pre.test(s)){
                filterList.add(s);
            }
        }
        return filterList;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值