java8函数式编程学习笔记

本文详细介绍了Java8中StreamAPI的使用,包括创建流、中间操作、终结操作以及Optional的运用,重点讲解了Lambda表达式、去重、过滤、转换等,还提到了并行流的优化和避免空指针异常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大数据量的集合处理

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但不会摧毁线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值