1. 尚硅谷_Java8新特性_简介

主要内容

在这里插入图片描述
Java新特性简介

其中最核心的为Lambda 表达式和Stream API
在这里插入图片描述
速度更快的原因:

比如一些底层的数据结构的变动,最典型的为hashmap

Jdk1.7 采用的是数组+链表的方式
1 首先通过hash算法(hashcode方法)得到数组的索引,数组中存的是key,然后通过equal方法比较是否是相同的元素,如果是则修改该key对应的值,如果key不同,则将其加入到链表中,将前一个存在数组中的元素撞出去。
在这里插入图片描述

要知道,如果链表中存储的数据量过大后,查询效率是很低的。

Jdk1.8后,就不再仅仅是 数组-链表 的数据结构了。

变为 : 数组-链表-红黑树
如果说当碰撞元素的个数8(链表),并且总容量大于64,会将链表转为红黑树

在这里插入图片描述

此时除了添加外,其他效率都比链表高

红黑树存储

然后ConcurrentHashMap 也从段机制改为CAS无锁算法了。
在这里插入图片描述

对底层内存结构也有变化

以前:栈、堆、方法区

其中方法区属于堆中永久区的一部分

在这里插入图片描述
Lambda 减少代码量

Stream API 操作数据
在这里插入图片描述

2. 尚硅谷_Java8新特性_为什么使用 Lambda 表达式

Lambda表达式

在这里插入图片描述

为什么使用Lambda?
原来使用匿名内部类的情况
在这里插入图片描述
其中核心代码只有一句,但是写了这么多行

使用Lambda的情况
在这里插入图片描述

现在增加一个需求:
在这里插入图片描述

原来的方式
在这里插入图片描述

然后调用过滤
在这里插入图片描述

然后需求变了就需要增加一个方法,一顿复制粘贴

然后这么多冗余代码,不得优化嘛

所谓优化,最好的方式就是前辈们的设计模式

现在开始优化上面代码

1 创建一个接口

然后实现这个接口

然后使用
还是传入一个集合,然后使用MyPredicate的方式进行过滤
在这里插入图片描述
在这里插入图片描述

这样就把筛选的方式抽象出来了,可以在调用方法时动态传入。

然后调用
在这里插入图片描述

这样也取出了年龄大于35岁的员工。

这样的好处是,filterEmployee方法只需要写一个,如果想要更换筛选条件,需要增加一个MyPredicate的实现类
在这里插入图片描述
在这里插入图片描述
这就是策略设计模式

在这里插入图片描述

这就是原来的方式,算是比较好的了,起码我没想到

再优化一下,使用匿名内部类

在这里插入图片描述

这种也挺好

然后使用Lambda方式优化
在这里插入图片描述

优化方式四

假设现在除了集合数据,其他的都没有
在这里插入图片描述

或者获取到每个人的名字
在这里插入图片描述

3. 尚硅谷_Java8新特性_Lambda 基础语法

Lambda 语法学习

左侧和右侧
在这里插入图片描述

Lambda 表达式需要函数式接口的支持

语法一: 无参数,无返回值

原先使用方式
在这里插入图片描述

使用lambda
在这里插入图片描述

使用还同以前 : r.run()
在这里插入图片描述

Lambda 底层是一个方法,类似于语法糖
在这里插入图片描述

现在虽然没有加final,但是在匿名内部类和lambda中,仍旧不能对变量做修改

语法格式二:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

语法格式3 若只有一个参数, 小括号可不写
在这里插入图片描述
在这里插入图片描述

语法格式4

如果有多条语句,必须写大括号
在这里插入图片描述

语法格式5
如果只有一条语句,大括号和return 都可以省略不写
在这里插入图片描述
在这里插入图片描述

语法格式6

Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文可以推断出数据类型,即”类型腿短”
在这里插入图片描述

总结一下

左右遇一括号省
左侧腿短类型省
在这里插入图片描述

Lambda 表达式需要 函数式接口的支持

函数式接口: 接口中只有一个抽象方法的接口,成为函数接口
在这里插入图片描述
在这里插入图片描述

需求 : 对一个数运算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 尚硅谷_Java8新特性_Lambda 练习

Lambda的应用

1
在这里插入图片描述
在这里插入图片描述

5. 尚硅谷_Java8新特性_四大内置核心函数式接口

现在的问题时: 为了使用lambda ,我们还需要自己去创建一个函数式接口,这很麻烦。

所以Java提供了几个函数式接口供我们使用。

四大核心接口

Consumer 消费型接口

Supplier 供给型接口

Function 函数型接口

Predicate 断言型接口
在这里插入图片描述

使用
在这里插入图片描述

供给型接口
在这里插入图片描述
在这里插入图片描述

函数式接口
在这里插入图片描述

断言型接口

用于做一些判断
在这里插入图片描述
在这里插入图片描述

所以说,常用的函数式接口,已经内置在Java中了,直接使用即可。
在这里插入图片描述

当然不止这四个,还有其他的一些接口
在这里插入图片描述
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐