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

主要内容

java8新特性 1-5
Java新特性简介

其中最核心的为Lambda 表达式和Stream API
java8新特性 1-5
速度更快的原因:

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

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

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

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

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

java8新特性 1-5

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

红黑树存储

然后ConcurrentHashMap 也从段机制改为CAS无锁算法了。
java8新特性 1-5

对底层内存结构也有变化

以前:栈、堆、方法区

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

java8新特性 1-5
Lambda 减少代码量

Stream API 操作数据
java8新特性 1-5

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

Lambda表达式

java8新特性 1-5

为什么使用Lambda?
原来使用匿名内部类的情况
java8新特性 1-5
其中核心代码只有一句,但是写了这么多行

使用Lambda的情况
java8新特性 1-5

现在增加一个需求:
java8新特性 1-5

原来的方式
java8新特性 1-5

然后调用过滤
java8新特性 1-5

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

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

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

现在开始优化上面代码

1 创建一个接口

然后实现这个接口

然后使用
还是传入一个集合,然后使用MyPredicate的方式进行过滤
java8新特性 1-5
java8新特性 1-5

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

然后调用
java8新特性 1-5

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

这样的好处是,filterEmployee方法只需要写一个,如果想要更换筛选条件,需要增加一个MyPredicate的实现类
java8新特性 1-5
java8新特性 1-5
这就是策略设计模式

java8新特性 1-5

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

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

java8新特性 1-5

这种也挺好

然后使用Lambda方式优化
java8新特性 1-5

优化方式四

假设现在除了集合数据,其他的都没有
java8新特性 1-5

或者获取到每个人的名字
java8新特性 1-5

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

Lambda 语法学习

左侧和右侧
java8新特性 1-5

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

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

原先使用方式
java8新特性 1-5

使用lambda
java8新特性 1-5

使用还同以前 : r.run()
java8新特性 1-5

Lambda 底层是一个方法,类似于语法糖
java8新特性 1-5

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

语法格式二:
java8新特性 1-5
java8新特性 1-5
java8新特性 1-5

语法格式3 若只有一个参数, 小括号可不写
java8新特性 1-5
java8新特性 1-5

语法格式4

如果有多条语句,必须写大括号
java8新特性 1-5

语法格式5
如果只有一条语句,大括号和return 都可以省略不写
java8新特性 1-5
java8新特性 1-5

语法格式6

Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文可以推断出数据类型,即”类型腿短”
java8新特性 1-5

总结一下

左右遇一括号省
左侧腿短类型省
java8新特性 1-5

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

函数式接口: 接口中只有一个抽象方法的接口,成为函数接口
java8新特性 1-5
java8新特性 1-5

需求 : 对一个数运算
java8新特性 1-5
java8新特性 1-5
java8新特性 1-5

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

Lambda的应用

1
java8新特性 1-5
java8新特性 1-5

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

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

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

四大核心接口

Consumer 消费型接口

Supplier 供给型接口

Function 函数型接口

Predicate 断言型接口
java8新特性 1-5

使用
java8新特性 1-5

供给型接口
java8新特性 1-5
java8新特性 1-5

函数式接口
java8新特性 1-5

断言型接口

用于做一些判断
java8新特性 1-5
java8新特性 1-5

所以说,常用的函数式接口,已经内置在Java中了,直接使用即可。
java8新特性 1-5

当然不止这四个,还有其他的一些接口
java8新特性 1-5
java8新特性 1-5

相关文章:

  • 2021-06-27
  • 2021-09-16
猜你喜欢
  • 2021-06-24
  • 2021-09-03
  • 2022-12-23
  • 2021-10-05
  • 2021-10-19
  • 2018-12-18
相关资源
相似解决方案