Java8 新特性

本文介绍了Java8的几个重要特性,包括接口中新增的default和static方法,简化代码的Lambda表达式,函数式接口的概念,以及方法和构造函数引用。此外,还详细讲解了Stream流的使用,如过滤、去重和排序等操作,以及如何处理可能为空的情况——Optional类的运用。
摘要由CSDN通过智能技术生成

个人学习笔记,欢迎小伙伴多提意见

1.接口中默认方法修饰为普通方法(新增关键字default、static)

2.lambda表达式(重点)

3.函数式接口

4.方法与构造函数引用

5.Stream流接口(重点)

6.Optional

1.接口中默认方法修饰为普通方法(新增关键字default、static)

作用:解决由于添加公共逻辑,不需要像之前大量的子类重写方法,只需要在方法添加上关键字完成功能编写即可,不影响其他地方

default允许子类重写方法(一般不用,除非实现多个接口都有default方法或者该逻辑需要)。static不允许重写

子类实现的多个接口(两个以上)含有default方法,需要重写方法default,指定执行哪个父类的default方法

2.lambda表达式(重点)

作用:简化匿名内部类的调用

lambda使用依赖于函数式接口编程

第一行打印语句,一个参数时,可以省略(),方法体只有一行语句时,可以省略{}和return

3.函数式接口

定义:一个接口中的抽象方法只有一个,那么这个接口就是一个函数式接口

一般会使用注解@FunctionalInterface 标识此接口是一个函数式接口,不加也行

在接口上直接加上注解,如果这个接口是一个函数式接口则不报错,否则编译报错

使用lambda表达式的前提

4.方法引入

方法引入:实际上就是lambda表达式直接引入的方法。简化lambda写法

静态方法引入

实例对象方法引入

构造函数方法引入

对象方法引入

必须遵循的规范:引入的方法参数列表返回类型必须要和实现的函数式接口中的参数列表、返回值类型保持一致。

函数式接口

使用方法引入

结合lambda表达式能够使代码变得更精简

5.Stream流

穿行流、并行流(多线程情况)

功能:过滤、去重、排序、最大最小值、分页、根据同名key相加value

list.stream()

.collect(Collectors.groupingBy(UserEnity::getName, Collectors.summingInt(UserEnity::getAge)))

.forEach((name, ageSum) -> System.out.println(name + "的年龄之和为:" + ageSum));

中间操作可以链式编程,每个方法返回stream流

常用的中间操作

  1. filter(Predicate predicate):过滤符合条件的元素。
  2. map(Function mapper):将一个元素映射为另一个元素。
  3. flatMap(Function> mapper):将一个元素映射为一个 Stream 流。
  4. distinct():去除重复元素。
  5. sorted():对元素进行排序。
  6. peek(Consumer action):在中间流程中打印出流中的元素,用于调试。
  7. limit(long maxSize):限制返回的元素个数。
  8. skip(long n):跳过前 n 个元素。
  9. unordered():取消流的有序性,提升性能。

6.Optional

作用:有效地解决空指针异常(NullPointerException)问题

常用方法:

Optional.ofNullable(对象或者值)

  1. isPresent():判断Optional对象是否包含值;
  2. get():获取Optional对象中的值,如果对象为空,则抛出NoSuchElementException异常;
  3. orElse(T other):如果Optional对象中的值存在,则返回该值,否则返回other;
  4. orElseGet(Supplier other):如果Optional对象中的值存在,则返回该值,否则调用Supplier对象的get()方法返回other;
  5. orElseThrow(Supplier exceptionSupplier):如果Optional对象中的值存在,则返回该值,否则抛出由Supplier对象指定的异常;
  6. ifPresent(Consumer consumer):如果Optional对象中的值存在,则调用Consumer对象的accept()方法处理该值;
  7. map(Function mapper):如果Optional对象中的值存在,则返回Function对象处理后的值,否则返回空的Optional对象;
  8. flatMap(Function> mapper):如果Optional对象中的值存在,则返回Function对象处理后的Optional对象,否则返回空的Optional对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值