jdk8新特性

一、lambda表达式

1、lambda表达式(包含参数和方法体)

lambda表达式可以说是匿名内部类的一种简化写法,省略了类名、方法名、类型等。

不同点(使用区别):匿名内部类可以实现接口的多个抽象方法,lambda表达式只针对有一个抽象方法的接口

说明:lambda表达式的参数对应抽象方法的参数,返回值对应抽象方法的返回值。(必须满足,不然没法用)

2、函数式接口

函数式接口就是只有一个抽象方法的接口

3、方法引用

方法引用可以说是lambda表达式的一种简化写法。

不同点(使用区别):lambda表达式的方法体已经有实现的方法时,才可以用。eg: System.out::println 替代 (str) -> System.out.println(str)

说明:

  ①方法引用所引用的方法的参数列表与返回值类型,需要与函数式接口中抽象方法的参数列表和返回值类型保持一致!格式1、2
  ②若Lambda 的参数列表的第一个参数,是实例方法的调用者,第二个参数(或无参)是实例方法的参数时,格式3: ClassName::MethodName

3种使用格式:  

  1、对象的引用 :: 实例方法名
  2、类名 :: 静态方法名
  3、类名 :: 实例方法名

3.2、构造器引用

构造器的参数列表,需要与函数式接口中参数列表保持一致!

使用格式: 类名 :: new

3.3、数组引用

使用格式: 类型[] :: new

4、Stream

是数据通道,用于操作数据源。不会存储元素,不改变源对象,操作是延迟执行的。可以执行复杂的查找、过滤、映射等操作。

操作步骤:1. 创建 Stream  2. 中间操作 3. 终止操作(终端操作)

4.1 、创建 Stream 

Collection 提供了两个方法  stream() 与 parallelStream();

通过 Arrays 中的 stream() 获取一个数组流;

通过 Stream 类中静态方法 of();

......

4.2.、中间操作

  筛选与切片
filter(Predicate p)——接收 Lambda , 从流中排除某些元素。
limit——截断流,使其元素不超过给定数量。
skip(n) —— 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个,则返回一个空流。与 limit(n) 互补
distinct——筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素;

   映射
map——接收 Lambda , 将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
flatMap——接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流

map类似于add方法,flatMap类似于addAll方法

  排序

sorted()——自然排序
sorted(Comparator com)——定制排序

  查找与匹配

allMatch——检查是否匹配所有元素
anyMatch——检查是否至少匹配一个元素
noneMatch——检查是否没有匹配的元素
findFirst——返回第一个元素
findAny——返回当前流中的任意元素
count——返回流中元素的总个数
max——返回流中最大值
min——返回流中最小值

4.3.、终止操作(终端操作)

归约
reduce(T identity, BinaryOperator) / reduce(BinaryOperator) ——可以将流中元素反复结合起来,得到一个值。

collect——将流转换为其他形式。接收一个 Collector接口的实现,用于给Stream中元素做汇总的方法

分组 Collectors.groupingBy(Employee::getStatus)

分区 Collectors.partitioningBy((e) -> e.getSalary() >= 5000)  ,partitioningBy可以理解为特殊的groupingBy,key值为true和false

二、Optional 容器类:用于尽量避免空指针异常
* Optional.of(T t) : 创建一个 Optional 实例
* Optional.empty() : 创建一个空的 Optional 实例
* Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
* isPresent() : 判断是否包含值
* orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
* orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
* map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
* flatMap(Function mapper):与 map 类似,要求返回值必须是Optional

原文地址:https://www.cnblogs.com/xyfaneast/p/12005375.html