现代java程序员要求_作为一个现代java程序员必会的知识——函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

每一个函数式接口都可以用lambda表达式来简化。

为什么说这玩意重要呢?在jdk1.5的时候三大特性我们必须要学会,泛型、枚举、注解,而作为一个现代java程序员,必须要会的是函数式接口,这个还是jdk1.8的特性,现在jdk已经发展到14了,各位小伙伴怎么可以连1.8的特性都不会呢?这时候又有一些小伙伴要说了,我也不会函数式接口,但这丝毫不影响我开发,那么问题来了,你不用,总会有别人用,新一代的框架大量使用函数式接口编程,如果不会这个玩意,估计以后看源码都看不懂了。

接下来是正题,我们下面讲解四个最经典的函数式接口吧。

1. 函数式接口

我们先来看一波源码:

3079b9c94fca6c968fd021f64ecc9464.png

看源码我们可以了解到,函数式接口有两个泛型,一个约定着入参类型,一个约定着返回值类型,我们代码实现一下,我们输入一串字符串,就让它返回这个字符串://函数式接口

Function function1 = new Function() {

@Override

public String apply(String str) {

return str;

}

};

调用一下上面的代码:System.out.println(function1.apply("aaa"));

控制台打印:

6377c31003b012ecf392bb4cf7a93d78.png

我们上面说过,每一个函数式接口都可以用lambda表达式简化,下面我们来试一下用lambda表达式简化一下代码://lambda表达式优化

Function function2 = (str) -> {return str;};

Function function3 = str-> str;

System.out.println(function2.apply("bbb"));

System.out.println(function3.apply("ccc"));

控制台打印:

bafd320519d0ed82b59477ca0e8b3fa3.png

2. 断定型接口

老规矩,源码走一波:

e7d5f4f86e543862ed0488d39e969b18.png

这下我们又突然恍然大悟,断定型接口就是只有一个入参,返回值为boolean类型,就TM你叫夏洛啊?就TM你叫断定型接口啊?

代码实现,我们来判断一下入参是否大于0,如果大于就返回true,否则返回false://断定式接口

Predicate predicate = new Predicate() {

@Override

public boolean test(Integer num) {

return num > 0;

}

};

//lambda简化

Predicate predicate2 = (num) -> num > 0;

System.out.println(predicate.test(1));

System.out.println(predicate.test(-1));

System.out.println(predicate2.test(1));

System.out.println(predicate2.test(-1));

控制台打印:

a3fd8e03ec3242308fe01213839ee124.png

3. 消费型接口

81eed56c6f1f43afaf474653b08be915.png

学完上面两个函数式接口,我相信聪明的小伙伴已经能看懂了,消费型接口,只有一个入参,没有返回值。

代码实现,让他在方法体里面输出我们入参给的数据://消费型接口

Consumer consumer = new Consumer() {

@Override

public void accept(String s) {

System.out.println(s);

}

};

//lambda简化

Consumer consumer2 = (str)->{System.out.println(str);};

consumer.accept("hello");

consumer2.accept("world");

控制台打印:

3a76f04cc2ab9793759fdb5b8b235d9f.png

4. 供给型接口

ee99cce53da301dbe4b77fc921f26df1.png

供给型接口,只有返回值,没有入参,我估计现在有的小伙伴都能举一反三抢答了~很棒。

代码实现://供给型接口

Supplier supplier = new Supplier() {

@Override

public String get() {

return "liqinglin";

}

};

//lambda简化

Supplier supplier1 = ()->{return "hahaha";};

System.out.println(supplier.get());

System.out.println(supplier1.get());

控制台打印:

fea679b4134f85e10b8d07cbf8665916.png

好了,这就是比较常用的四种函数式接口,小伙伴是不是感觉很简单呢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值