Java1.8新特性

本文深入探讨了Java8中的Lambda表达式、函数式接口、回调函数等新特性,并介绍了自定义函数式接口的方法及JDK自带的函数式接口。此外,还详细解析了Stream API的使用方法及其常见异常。

1 .Lambda

lambda表达式是一种没有名字的函数,也可以称为闭包
本质就是一个匿名内部类,还有叫箭头函数。

把方法作为一个参数,进行传递
Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为“->” ,该操作符被称为Lambda 操作符或箭头操作符。它将Lambda 分为两个部分:
左侧:指定了Lambda 表达式需要的参数列表
右侧:指定了Lambda 体,是抽象方法的实现逻辑,也即Lambda 表达式要执行的功能。

2. 函数式接口

本质就是一个只有一个抽象方法,但是可以有多个非抽象方法的接口

可以保护多个静态方法和默认方法

专用注解 @FunctionalInterface ,检查是否是一个函数式接口,也可以不写该注解

3.回调函数

方法需要传入一个参数也是方法,并且在该方法中对这个传入的方法进行调用

4. 自定义函数式接口

  1. 无参
  2. 有参
  3. 自定义参数

5. JDK自带的函数式接口

Supplier

Supplier 接口 : 表示供应商,所以有返回值,可以get方法获取数据

Consumer

Consumer 接口 : 表示消费者接口,所以不需要返回值

accept(T t) 用于执行消费操作

Function

Function<T,R> 接口 表示接收一个参数,并产生一个结果

R apply(T t) 方法

Predicate

Predicate 接口 断言接口,做一些判断

booean test(T) 用于做校验比较操作

6. 方法,构造器,数组

方法引用
方法引用的三种形式
对象::实例方法名
类::静态方法名
类::实例方法名
当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!

方法引用可以看做是Lambda表达式深层次的表达。

实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致

构造器引用
格式:ClassName::new
与函数式接口相结合,自动与函数式接口中方法兼容。
可以把构造器引用赋值给定义的方法,要求构造器参数列表要与接口中抽象方法的参数列表一致!且方法的返回值即为构造器对应类的对象。

7.StreamAPI

Stream 是Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用SQL 执行的数据库查询。也可以使用Stream API 来并行执行操作。简言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

用来处理集合、数组的API,集合讲的是数据,而流是计算

①Stream 自己不会存储元素。
②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

运行机制

Stream分为源source , 中间操作,终止操作

1-创建Stream
一个数据源(如:集合、数组),获取一个流

2-中间操作
一个中间操作链,对数据源的数据进行处理
一个流可以有0~N个中间操作,每一个中间操作都会返回一个新的流,方便下一个操作使用
一个流只能有一个终止操作
中间操作也称为转换算子-transformation

3-终止操作(终端操作)
一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用
Stream只有遇到终止操作,它对策数据源才会开始执行遍历等操作
终止操作也称为动作算子
因为动作算子的返回值不再是Stream,所以这个计算就终止
只有碰到动作算子的时候,才会真正的计算

常见的中间操作转换算子

一个中间操作链,对数据源的数据进行处理
一个流可以有0~N个中间操作,每一个中间操作都会返回一个新的流,方便下一个操作使用
一个流只能有一个终止操作

filter , distinct , map , limit , skip , flatMap

filter : 对元素进行过滤,不符合条件的,就不要了
distinct : 去掉重复
skip : 跳过多少个元素
limit : 取一个集合中的前几条数据
map : 可以理解为是在遍历集合的过程中,对元素进行操作
比如进行判断,集合元素是否大于4 ,返回值为boolean类型
或者对集合元素进行更改,比如每个元素都自身+1
flatMap : 解决一个字符串数组,返回单一的字符串使用flatMap

常用的终止操作-动作算子

一旦执行终止操作,就执行中间操作链,并产生结果。
因为动作算子的返回值不再是Stream,所以这个计算就终止
只有碰到动作算子的时候,才会真正的计算

循环:forEach
计算 : min,max,count,average
匹配 : anyMatch,allMatch,noneMatch,findFirst,findAny
汇聚 : reduce
收集器 : collect

8.常见异常
Stream 使用之后,必须重新生成新的Stream,不能使用原来的stream

解决方法
链式调用,是因为转换 算子的返回值都是一个新的Stream,而这个新的Stream还没有操作过 ,所以可以链式调用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值