大数据量的集合处理
stream流和optional流处理集合效率高
处理集合可以消除大量的嵌套
lambda表达式
对一些匿名内部类进行简化,方法重写
lambda表达式仅能放入如下代码: 预定义使用了 @Functional 注释的函数式接口,自带一个抽象函数的方法,或者SAM(Single Abstract Method 单个抽象方法)类型。这些称为lambda表达式的目标类型,可以用作返回类型,或lambda目标代码的参数。例如,若一个方法接收Runnable、Comparable或者 Callable 接口,都有单个抽象方法,可以传入lambda表达式。类似的,如果一个方法接受声明于 java.util.function 包内的接口,例如 Predicate、Function、Consumer 或 Supplier,那么可以向其传lambda表达式。
著作权归@pdai所有
原文链接:https://pdai.tech/md/java/java8/java8-stream.html

进一步省略


Stream流

distinct去重
filter过滤根据条件过滤
foreach遍历并操作
idea可以查看stream流的执行细节
具体流程
stream操作
创建流
单列
集合类型如connectio类直接使用.stream返回stream对象
数组类型int [] a 使用工具类Arrarys.stream(a)返回stream对象
使用工具类Stream.of(a)返回stream对象
双列结合
现转换为单列集合再转化为流
map.entrySet()

中间操作
filter

ctrl+b提示操作
map

用于类型转换
将处理的author,转换为具体要操作的name

也可以对某一部分进行操作
distinct
去重

依赖与equals进行判断是否相同,对于对象就是判断引用是否相同
sorted

使用空参的sorted,则对象要实现compareable接口

limit
设置stream的最大长度,超出部分将会舍去

skip
跳过前n个元素

flatmap

返回值是Stram类型,可以理解为流嵌套并做拍平处理。flat就是平的意思
普通的map返回的是对象类型。

终结操作
forEach

count
计数

返回 值long 用long来接受
max和min


要使用比较器
返回值optional

collect

转成list集合

使用工具类
转set集合

使用工具类
转map

工具类,传入两个方法,要对key进行去重
anymatch

allmatch

findany

用的少,返回optional
如果optional中没有数据,使用

findfirst

REDUCE


两个参数的情况

第一个参数是自己定义的元素,第二个参数是要操作的stream中的值
一个参数的情况

将第一个值设置为初始值,返回optional
注意事项

optional
stream流中可能出现空指针异常
optional可以更优雅的避免空指针异常
创建optional


安全消费值

安全获取值

过滤

判断

数据转换

函数式接口
消费型接口

函数式接口

判断型接口

生产性接口

java默认方法
and

两个对象间使用and
or和negate

方法引用

引用类的静态方法

引用对象的实例方法

引用类的实例方法

构造器引用

基本数据类型优化

装箱和拆箱的大量耗时

并行流
parallel方法


peek()调试函数,类似于foreach但不会摧毁线程
本文详细介绍了Java8中StreamAPI的使用,包括创建流、中间操作、终结操作以及Optional的运用,重点讲解了Lambda表达式、去重、过滤、转换等,还提到了并行流的优化和避免空指针异常的方法。
7190

被折叠的 条评论
为什么被折叠?



