【Java8 新特性】笔记

【Java8 新特性】笔记,第1张

【Java8 新特性】笔记 Lambda表达式

Lambda 是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码。使用它可以写出更简介、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升

lambda表达式的本质就是作为函数式接口的实例
以前用匿名实现类表示的现在都可以用Lambda表达式来写

Funcational 函数式接口

只包含一个抽象方法的接口,称为函数式接口你可以通过Lambda表达式来创建该接口的对象我们可以在一个接口上使用@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口

面向对象OOP
面向函数式OOF

Java内置的四大函数式接口

Consumer void accept(T t) 消费型接口Supplier T get() 共给型接口Function R apply(T t) 函数型接口Predicate boolean test(T t) 断定型接口 方法引用与构造器引用

当要传递给Lambda体的 *** 作,已经有实现的方法了,可以使用方法引用方法应用可以看作是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可认为是Lambda表达式的一个语法糖要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致格式:使用:: *** 作符将类与方法分隔开

方法引用的三种方式

对象::非静态方法名类::静态方法名类::非静态方法名

方法引用使用的要求
要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型相同

//情况一: 对象::实例方法
Consumer中的void accept(T t)
PrintStream中的void println(T t)

//情况二: 类::静态方法
Comparator中的int compare(T t1,T t2)
Integer中的int compare(T t1,T t2)

//情况三: 类::实例方法
Comparator中的int compare(T t1,T t2)
String中的int t1.compare(t2)

Function中的R apply(T t)
Employee中的String getName()
Stream API

Java8中有两个最为重要的改变。第一个是Lambda表达式;另一个是Stream API

Stream API把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充

使用Stream API对集合数据进行 *** 作,就类似于使用SQL执行的数据库查询

Sream是数据渠道,用于 *** 作数据源(集合,数组)所生成的元素序列

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

Stream的三类 *** 作
创建 *** 作
中间 *** 作,多个
终止 *** 作

通过集合创建Stream
list.stream()	返回一个顺序流
list.parallelStream()	返回一个并行流

通过数组创建Stream
Arrays.stream(array)

通过stream的of方法创建Stream
Stream.of(1,2,3)

迭代
Stream.iterate(0,t->t+2).limit(10).forEach

生成
Stream.generate(Math::random).limit(10).forEach

filter	接收lamdba,从流中排除某些元素
limit	截断流,使其元素不超过给定数量
skip	跳过元素
distinct	筛选,去重
map
mapToDouble
mapToInt
mapToLong
flatMap
sorted
allMatch	检查是否匹配所有元素
anyMatch	检查是否至少匹配一个元素
noneMatch	检查是否没有匹配所有元素
findFirst	返回第一个元素
findAny	返回当前流中的任意元素
count	返回流中元素的总个数
max	返回流中最大值
min	返回流中最小值
forEach	迭代
reduce	可以将流中元素反复结合起来,得到一个值
collect	将流转换为其他形式,接收一个Collector接口的实现,用于给Stream中元素做汇总的方法
Optional 类

Optional 类是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常

Optional.of(T t)	创建一个Optional实例,t必须非空
Optional.empty()	创建一个空的Optional实例
Optional.ofNullable(T t)	t可以为null
isPresent()	判断是否包含对象
isPresent(Consumer consumer)	如果有值,就执行参数接口
get()	如果调用对象包含值,返回该值,否则异常
orElse(T other)	如果有值则将其返回,否则返回指定的other对象
orElseGet(Supplier other)	如果有值则将其返回,否则返回参数接口实现的对象
orElseGet(Supplier exceptionSupplier)	如果有值则将其返回,否则抛出Supplier接口实现提供的异常

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5710329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存