111

欢迎使用Markdown编辑器

JDK1.8新特性:
Lambda表达式
函数式接口
方法引用
接口的默认方式和静态方法
Optional
Streams
Lambda表达式

Lambda 表达式,Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。可以使代码变的更加简洁紧凑。

⒈基本语法

(参数列表) -> {代码块}

需要注意:

· 参数类型可省略,编译器可以自己推断

· 如果只有一个参数,圆括号可以省略

· 代码块如果只是一行代码,大括号也可以省略

· 如果代码块是一行,且是有结果的表达式, return 可以省略

注意:事实上,把Lambda表达式可以看做是匿名内部类的一种简写方式。当然,前提是这个匿名内部类对应的必须是接口,而且接口中必须只有一个函数!Lambda表达式就是直接编写函数的:参数列表、代码体、返回值等信息
⒉用法示例

假设我们要对集合排序,我们先看JDK1.7的写法,需要通过匿名内部类来构造

如果是jdk1.8,我们可以使用新增的集合API:sort(Comparator c) 方法,接收一个比较器
示例2:单个参数

还以刚才的集合为例,现在我们想要遍历集合中的元素,并且打印。

jdk1.8给集合添加了一个方法:foreach() ,接收一个对元素进行操作的函数:
在这里插入图片描述
实例3:把Lambda赋值给变量

Lambda表达式的实质其实还是匿名内部类,所以我们其实可以把Lambda表达式赋值给某个变量。
Lambda表达式是接口的匿名内部类的简写形式
⒈Function类型接口表的是有参数,有返回值的函数。还有很多类似的Function接口:

在这里插入图片描述
⒉Consumer系列

Consumer系列与Function系列一样,有各种衍生接口,这里不一一列出了。不过都具备类似的特征:那就是不返回任何结果。
⒊ Predicate系列
在这里插入图片描述
方法引用

方法引用使得开发者可以将已经存在的方法作为变量来传递使用。方法引用可以和Lambda表达式配合使用。

⒈语法
总共有四类方法引用
在这里插入图片描述

· Function<T,R> :函数接口,接收T类型,返回R类型。用这个函数接口对list中的元素T进行转换,变为R类型
① 类的静态方法引用
在这里插入图片描述
② 类的非静态方法引用
在这里插入图片描述

接口的默认方法和静态方法

Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法。

⒈默认方法

默认方法使得开发者可以在 不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。

默认方法和抽象方法之间的区别在于抽象方法需要实现,而默认方法不需要。接口提供的默认方法会被接口的实现类继承或者覆写
⒉ 静态方法

可选类型(Optional)语法:
如果g为空,将c赋值为456,否则将j的值赋d:
var d = c ?? 456
用!和?定义的区别:
Int ?*:必须使用!拆包(取值)
Int!:自动拆包取值
当一个类没有创建构造函数时,编译器自动生成一个无参构造函数;一旦创建自定义构造函数,编译器将不会再自动生成无参构造函数。
class与结构体的区别:
用let定义的结构体变量,成员不能修改
结构体是值类型的,在赋值的时候会发生复制
类是引用类型
结构体的成员方法需要加mutating才能修改成员变量,类科研直接修改
streams:
java引入Stream之后所有的集合类都添加了一个stream()方法
如果我们想使用多线程来处理集合类的数据,Stream提供了非常方便的多线程方法
Stream的操作可以分为两类一类是中间操作中间操作返回Stream,因此可以级联调用另一类是终止操作,这类操作会返回Stream定义的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值