大数据量的集合处理
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但不会摧毁线程