java8新特性 1-5

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中了,直接使用即可。
在这里插入图片描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值