函数式编程

举报
西魏陶渊明 发表于 2022/09/25 03:20:37 2022/09/25
【摘要】 提示 Java8所有的新特性基本基于函数式编程的思想,函数式编程给Java带来了注入了新鲜的活力。 函数式编程其实并不是很难,小编在学习函数式编程时候刚开始一头雾水,最后仔细观察就发现了其中的小窍门,读了本篇文章如果还没有掌握,就算我输了 加我微信: lxchinesszz 找我一对一教学 # 函数式编程 #...

提示

Java8所有的新特性基本基于函数式编程的思想,函数式编程给Java带来了注入了新鲜的活力。 函数式编程其实并不是很难,小编在学习函数式编程时候刚开始一头雾水,最后仔细观察就发现了其中的小窍门,读了本篇文章如果还没有掌握,就算我输了 加我微信: lxchinesszz 找我一对一教学

# 函数式编程

# 一、Lambda表达式

注意: 以下方法都可以使用表达式来进行缩写

我们来看Java中如何来定义一个方法

# 1. 语法

()->{}

其中小括号里面可以放入参,大括号就是方法体,里面也允许有返回值。

当方法体中只有返回值而没有其他语句时候,大括号和 return 关键字都可以省略不写。

# 2. 方法引用

只要用.引用不报错的,都可以将.换成:

类型 语法
1、引用静态方法 ClassName::staticMethodName
2、引用构造函数 ClassName::new
3、引用特定类型的实例方法 ClassName::instanceMethodName
4、引用特定对象的实例方法 objectName::instanceMethodName

# 二、Java8新增函数式接口

# 1. Predicate接口

Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)

Predicate<String> predicate = (s) -> s.length() > 0;
   
1

根据前面的语法我们知道小括号里面可以放入参,大括号里面放出参,当大括号里面只有返回值时候,大括号和 return 关键字也可以省略。如上。

# 2. Function 接口

Function 接口有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法(compose, andThen):

Function<Integer, Integer> function = (x) -> 2 * x;
   
1

同理,这个接口有一个入参和出参,如果返回体重不包含其他逻辑,只有一个返回值,大括号和 return 关键字也可以省略。如上。

# 3. Supplier 接口

Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数


    
  1. public class Main{
  2. public static void main(String[] args) {
  3. //构造方法
  4. Supplier<Main> supplier = () -> new Main();
  5. Supplier<Main> mainSupplier = Main::new;
  6. Supplier<Main> mainSupplier1 = Main::staticMethod;
  7. }
  8. private static Main staticMethod() {
  9. return new Main();
  10. }
  11. }
1 2 3 4 5 6 7 8 9 10 11

因为没有入参,所以小括号里面什么都不用写。当遇到这种情况,同样可以用上面其他两种来替换

# 4. Consumer 接口

Consumer 是一个只有入参,但是无出参的接口。


    
  1. public class Main {
  2. public static void main(String[] args) {
  3. List<String> dataList = Arrays.asList("1", "2");
  4. //特定类的静态方法
  5. dataList.forEach(Main::staticMethod);
  6. dataList.forEach((x) -> System.out.println(x));
  7. dataList.forEach(System.out::println);
  8. }
  9. private static void staticMethod(String name) {
  10. System.out.println("对象静态方法引用:" + name);
  11. }
  12. }
1 2 3 4 5 6 7 8 9 10 11 12 13 14

# 三、快速记忆

虽然新增的函数式接口并不多,但是想要一次性死记住,还是有一点点的难度。小编的学习方式是 理解这记忆。

类型 简记
1、Predicate 条件类型
2、Supplier 无入参,有出参
3、Function 有入参,有出参
4、Consumer 有入参,无出参

最后求关注,求订阅,谢谢你的阅读!

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/125858019

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。