方法引用、Stream流、Optional

系列文章目录

方法引用、Stream的中间操作,终结操作、静态方法

一、方法引用

方法引用就是把已经存在的方法拿过来去用

条件

引用的地方必须是函数式接口
被引用的方法必须已经存在
被引用方法的形参和返回值类型需要和抽象方法保持一致
被引用的方法的功能要满足当前需求

静态方法

类名::方法名,去调用静态方法

对象引用成员方法

对象::方法名

其他类:其他类对象::方法名

本类:this::方法名

父类:super::方法名

类名引用成员方法

类名::成员方法
规则发生了改变:被引用方法的形参和抽象方法的第二个形参到最后一个形参保持一致,返回值需要保持一致。

就是说只要它们的返回值类型一样,功能可以实现,形参如果抽象方法没有第二个参数,那么被引用的方法就是无参的

引用构造方法

类名::new

引用数组构造方法

数据类型[]::new

小技巧:

1.现在有没有一个方法符合当前要求
2.如果有这个方法,这个方法是否满足引用的规则
静态  类名::方法名
成员方法  
构造方法

二、Stream流

java.util.stream.Stream 接口,表示能应用在一组元素上,一次执行的操作序列,也就是可以对一组数据进行连续的多次操作。理解为一个流水线,做一堆操作,有中间方法和终结方法

获取Stream流:

单列集合:default Stream<T> stream()               Collection中的默认方法
双列集合:无                                                            无法直接使用stream流
数组:public static <T> Stream<T> stream(T[ ]  array)    Arrays工具类中的静态方法
一堆零散数据:public static <T> Stream<T> of(T... values)    Stream接口中的静态方法

基本数据类型转Stream:IntStream LongStream DoubleStream

IntStream stream1 = IntStream.of(new int[]{1, 2, 3});

//[1,3)左闭右开

IntStream stream2 = IntStream.range(1, 3);

//[1,3],闭空间

IntStream stream3 = IntStream.rangeClosed(1, 3);

Stream转为其他类型

转为数组:toArray(可以使用方法引用)

转为集合:collect(Collectors.toList())

collect(Collectors.toCollection(ArrayList::new))//可以指定返回具体那个集合

转为字符串:collect(Collectors.joining("-")):转为字符串

Stream流常用中间方法:

filter:过滤
limit:获取前几个元素
skip:跳过前几个元素
distinct:元素去重,依赖(hahCode和equals方法)
concat:合并a和b两个流为一个流,静态方法
map:转换流中的数据类型

sorted:排序

Stream.generate ,通过 Supplier 接口 , 可以自己来控制数据的生成,静态方法
Stream.iterate ,它跟 reduce 操作很像,需要接受一个起始值(种子),然后通过函数得出一个
结果,再把结果当做参数传给函数,再得出第二个结果,依次类推,其实就是一个递归操作。

Stream流常用终结方法:

forEach:遍历
count:统计
toArray:收集流中的数据放到数组中
collect:收集流中的数据放到集合中

iterator , 返回迭代器对象
max : 返回流中基于comparator所指定的比较规则,比较出的最大值
min : 返回流中基于comparator所指定的比较规则,比较出的最小值
findFirst ,返回 Stream的第一个元素
Match ,匹配操作, Stream 中提供了多种匹配模式

IO变Stream

调用方法lines,返回一个流对象

public class BufferedReader extends Reader {
        //@since 1.8
        public Stream < String > lines () {
        //..
        }
}

并行流和串行流 

Stream有串行和并行两种。串行Stream上的操作是在一个线程中依次完成,而并行Stream则是在多 个线程上同时执行。

正常情况下是串行的

创建并行流的两种方式:

第一:串行流调用parallel()方法

第二:用对象调用parallelStream()方法

三、Optional

java.util.Optional<T> 类,是用来防止NullPointerException异常的辅助类型, Optional 对 象中封装的值,可以是 null ,也可以不是 null

常用方法:

of方法: 为非null的值创建一个Optional对象 *如果传入参数为null,则抛出NullPointerException

ofNullable方法 :ofNullable与of方法相似,唯一的区别是可以接受参数为null的情况

isPresent方法 :如果值存在返回true,否则返回false 

get方法: 如果Optional有值则将其返回,否则抛出NoSuchElementException

ifPresent方法 :如果Optional实例有值则为其调用Consumer接口中的方法,否则不做处理

orElse方法: 如果有值则将其返回,否则返回指定的其它值

orElseGet方法: orElseGet与orElse方法类似,区别在于得到的默认值的方式不同

map方法 :如果有值,则调用mapper的函数处理并得到返回值 * 返回值并且依然Optional包裹起来,其泛型和你返回值的类型一致

flatMap方法: 如果有值,则调用mapper的函数返回Optional类型返回值,否则返回空 Optional

filter方法 :如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值