【Java8新特性】——函数式接口

前提

    lambda表达式需要“函数式接口”的支持,接口中只有一个抽象方法的接口称为函数式接口,可以使用注解@FunctionalInterface检查接口是否是函数式接口。有些时候不能为了使用lambda表达式而去专门创建一些接口,这样反而会降低了开发效率。其实Java8本身提供一些函数式接口,方便大家的使用!本文主要讲解核心的四大内置函数式接口!

四大核心函数式接口

1、Consumer<T>:消费型接口

void accept(T t);

用途:对类型为T的对象应用操作,没有返回值,方法为 void accept(T t);

    @Test
    public void test3() {
        consumer(1000,e-> System.out.println("消费"+e+"元"));
    }

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

2、Supplier<T>:供给型接口

T get()

用途:产生类型为T的对象,方法为T get();

  @Test
    public void test4() {
        Double aDouble = strValue(Math::random);
        System.out.println(aDouble);
    }

    public Double strValue(Supplier<Double> supplier) {
        return supplier.get();
    }

3、Function<T,R>:函数式接口

R apply(T t);

用途:对类型为T的对象应用操作,并返回结果,结果是R类型的对象,包含方法:R apply(T t);

   @Test
    public void test5() {
        Integer change = change("123", (e) -> Integer.parseInt(e));
        System.out.println(change);
    }

    public Integer change(String str, Function<String, Integer> function) {
        return function.apply(str);
    }

4、Predicate<T>:断言型接口

boolean test(T t);

用途:确定类型T的对象是否满足某种约束,并返回boolean值,包含方法:boolean test(T t);

 @Test
    public void test1() {
        List<String> list = Arrays.asList("Hello", "taobao", "ji", "json");

        List<String> stringList = filterStr(list, s -> s.length() > 3);

        stringList.forEach(str-> System.out.println(str));
    }

    public List<String> filterStr(List<String> list, Predicate<String> predicate) {
        List<String> strList = new ArrayList<>();

        list.forEach(str->{
            if (predicate.test(str)) {
                strList.add(str);
            }
        });
        return strList;
    }

关于函数式接口以及lambda个人认知

    函数式接口定义了抽象方法,相比其他接口,缺少实现类,而lambda可以看成可以传递的代码段,刚好充当了抽象方法的实现。所以小编认为lambda也可以看做是接口中抽象方法另一种实现方法的体现。

其他接口

上述四种接口满足条件有限,Java8中也提供了一下其他接口,供大家使用


总结

    系统学习了lambda和函数式接口终于能理解为什么某些大神写代码写来写去,大部分接口方法最终都是同一个!lambda和函数式接口总结完成,接下就是在项目中真正的去使用,体会Java研发人员带来的好处,然后提升自己的能力。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值