Java8的新特性:函数式接口的介绍与使用

本文深入探讨了Java8中的函数式接口概念,包括其定义、使用和自定义方式,并通过Lambda表达式的示例展示了如何简化代码。文章通过Consumer接口和Predicate接口的案例,解释了如何在实际编程中运用函数式接口。此外,还介绍了函数式接口在提高代码可读性和支持面向函数编程方面的优势,并列举了一些常见的函数式接口。
摘要由CSDN通过智能技术生成

我是 ABin-阿斌:写一生代码,创一世佳话。 如果小伙伴们觉得我的文章有点 feel ,那就点个赞再走哦。
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/01244a35a05f9070bf77418374331efc.

什么是函数式接口

  • 只包含一个抽象方法的接口,称为函数式接口。

格式:

修饰符 interface 接口名称{
    public abstract 返回值 方法名称(参数列表)
   
}
修饰符 interface 接口名称{
       返回值 方法名称(参数列表
}

自定义函数式接口

格式:

@FunctionalInterface
public interface MyInterface {

    void method1();

//    void method2();
}
  • 可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。
  • 可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。

格式:

在这里插入图片描述

  • 简单的说,在Java8中,Lambda表达式就是一个函数式接口的实例。这就是Lambda表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用 Lambda 表达式来表示。
  • 所以以前用匿名实现类表示的现在都可以用 Lambda 表达式来写。

使用函数式接口有哪些好处

  • 为了更加方便的使用 Lambda 表达式和支持 OOF(面向函数编程)

常用的函数式接口

在这里插入图片描述

不怎么常用的函数式接口

在这里插入图片描述

如何去使用函数式接口

案例一:

Consumer 消费型接口的演示

@Test
    public void test01(){
        happyTime(6799, new Consumer<Double>() {
            @Override
            public void accept(Double aDouble) {
                System.out.println("华为最新款手机 Mate40Pro 的价格为:" + aDouble);
            }
        });

        System.out.println("************Lambda表达式***************");

        happyTime(4388,money -> System.out.println("华为 P40 的价格为:"+ money));

    }

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

案例二:

Predicate 断定型接口演示:判断集合中带有 “小” 字的都进行输出

@Test
    public void test02(){
        List<String> list = Arrays.asList("小星星","小东东","小西西","小楠楠","小朋友","张北北");

        List<String> filter = filterString(list, new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.contains("小");
            }
        });
        System.out.println(filter);

        System.out.println("*********Lambda表达式***************");

        List<String> filter2 = filterString(list,s -> s.contains("小"));
        System.out.println(filter2);

    }

    public List<String> filterString(List<String> list, Predicate<String> predicate){

        ArrayList<String> filterList = new ArrayList<>();

        for (String s : list) {
            if(predicate.test(s)){
                filterList.add(s);
            }
        }
        return filterList;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值