发布时间:2023-01-26 文章分类:编程知识 投稿人:赵颖 字号: 默认 | | 超大 打印

读Java8函数式编程笔记01_Lambda表达式

1.Java 8函数式编程

1.1.没有单子

1.2.没有语言层面的惰性求值

1.3.没有为不可变性提供额外支持

1.4.集合类可以拥有一些额外的方法:default方法

2.现实世界中,数据和行为并存

2.1.面向对象编程是对数据进行抽象

2.2.函数式编程是对行为进行抽象

3.函数式编程

3.1.在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值

3.2.关心的是如何写出好代码,而不是符合函数式编程风格的代码

3.3.使用Lambda表达式,就是将复杂性抽象到类库的过程

4.匿名内部类

4.1.目的

4.1.1.为了方便Java程序员将代码作为数据传递

4.2.传入一个实现某接口的对象

4.3.显式地声明参数类型

5.Lambda表达式

5.1.一个匿名方法,将行为像数据一样进行传递

5.1.1.一种紧凑的、传递行为的方式

5.1.2.传入了一段代码块——一个没有名字的函数

5.1.3.无需指定类型,程序依然可以编译

5.2.形式

5.2.1.不包含参数,使用空括号()表示没有参数

5.2.2.包含且只包含一个参数,可省略参数的括号

5.2.3.可以是一段代码块,使用大括号({})将代码块括起来

5.2.4.包含多个参数的方法

5.2.5.显式声明参数类型,此时就需要使用小括号将参数括起来,多个参数的情况也是如此

5.3.常见结构

5.3.1.BinaryOperator add=(x, y) → x+y

5.4.引用值,而不是变量

5.4.1.将变量声明为final

5.4.1.1.意味着不能为其重复赋值

5.4.1.2.是在使用赋给该变量的一个特定的值

5.4.1.3.Java8可以引用非final变量,但是该变量在既成事实上必须是final

5.4.2.未赋值的变量与周边环境隔离起来,进而被绑定到一个特定的值

5.4.2.1.闭包

5.5.Lambda表达式的类型依赖于上下文环境,是由编译器推断出来的

5.6.目标类型是指Lambda表达式所在上下文环境的类型

6.函数接口

6.1.只有一个抽象方法的接口

6.2.Lambda表达式本身的类型

6.3.接口中单一方法的命名并不重要,只要方法签名和Lambda表达式的类型匹配即可

6.3.1.为参数起一个有意义的名字,增加代码易读性

6.4.读Java8函数式编程笔记01_Lambda表达式

7.类型推断

7.1.程序依然要经过类型检查来保证运行的安全性,但不用再显式声明类型罢了

7.2.省略类型信息可以减少干扰,更易弄清状况

7.3.需要类型信息帮助理解代码

7.4.一开始类型信息是有用的,但随后可以只在真正需要时才加上类型信息