Java函数式编程笔记(一)—— Lambda表达式

Java函数式编程笔记(一)-Lambda表达式

什么是函数式编程

这个问题可以看英文的Wiki,我比较懒不想翻译了ㄟ( ▔, ▔ )ㄏ。如果想详细理解可以看下知乎的讨论
简单说下函数式编程的特点:

  1. 函数是一等公民,所以也就是有了如下用法。
  2. 变量不可变。
  3. 惰性求值什么的(这个平时编程估计感受不到)

为什么要使用Lambda表达式

  1. 代码会很简洁
  2. 更高层次的抽象
  3. 处理回调函数和事件的时候更加方便

Java 8的Lambda表达式

Java 8的Lambda表达式的写法

基本形式:
(参数)->{表达式}
BinaryOperator add = (Long x, Long y) -> {x + y};

Ps:
1. 如果只有一行语句,可以省略表达式的大括号。
例如:Runnable singleStatement = () -> System.out.println(“hello world”);
2. 如果只有一个参数,可以省略参数的括号。
例如:ActionListener oneArgument = event -> System. out.println(” button clicked”);
3. 参数可以不加类型声明,Lambda 表达式的类型依赖于上下文 环境, 可以由编译器推断出来的。
例如:BinaryOperator< Long> add = (x, y) -> x + y;
4. 没有参数的时候,不能省略括号。
例如:Runnable singleStatement = () -> System.out.println(“hello world”);

值引用,而不是地址

在Java 8以前使用匿名内部类的时候,内部使用外部引用类型的变量,都需要将变量声明为final。在Lambda表达式中同样如此,只是Java 8放松了这一限制,可以引用非final变量,但是该变量在既成事实上必须是final。如果给传入Lambda表达式中的变量多次赋值,编译器酒会报这样一个错误:
信息: local variables referenced from a Lambda expression must be final or effectively final。
image_1bib1csuv12225l3sc71e1r1c82m.png-51.2kB

函数接口

定义:函数接口是只有一个抽象方法的接口, 用作Lambda表达式的类型。

Ps:其实和以前没有Lambda表达式,声明回调接口的方式是一样的。最起码都是这么用的,不够现在如果想写成Lambda表达式的形式,是不能声明一个以上的抽象方法的。

Java 8提供的函数接口:

image_1bib50kbqeh111mq17d9o1416a613.png-31.1kB

参考:

  1. 维基百科 函数式编程 https://www.wikiwand.com/en/Functional_programming
  2. 维基百科 编程范性 https://www.wikiwand.com/zh/%E7%BC%96%E7%A8%8B%E8%8C%83%E5%9E%8B
  3. 维基百科 函数式编程语言 https://www.wikiwand.com/zh/%E5%87%BD%E6%95%B8%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80
  4. [英]沃伯顿(Richard Warburton). Java 8函数式编程 (图灵程序设计丛书) 人民邮电出版社. Kindle 版本.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值