jdk8新特性

43 阅读3分钟

stream流

  • 创建流
    • 单列集合:集合对象.stream()
    • 数组:Arrays.stream(arr)或Stream.of(arr)
    • 双列集合:转换为单列集合在创建
  • 中间操作
    • filter:对流中的元素进行过滤,符合条件的才能继续留在流中。
    • map:可以对流中的元素进行计算或转换
    • distinct:可以去除流中的重复元素
    • sorted:可以对流中的元素进行排序(如果是空参的sorted(),需要流的元素是实现Comparable。)
    • limit:可以设置流的最大长度,超出的部分将被抛弃。
    • skip:跳过流中的前n个元素。返回剩下的元素。
    • flatMap:可以把一个对象转换成多个对象作为流中的元素。
  • 终结操作
    • forEach:对流中的元素进行遍历
    • count:可以获取当前流中元素的个数
    • max:求流中的最大值
    • min:求流中的最大值
    • collect:把流转换成一个集合
    • anyMatch:可以用来判断是否有任意符合条件的元素,结果为boolean类型
    • allMatch:可以用来判断是否都符合屁匹配条件,结果为boolean类型
    • noneMatch:判断流中的元素都不符合匹配条件,结果为boolean类型
    • findAny:获取流中随机一个元素
    • findFirst:获取流中的第一个元素
    • reduce归并:对流中的数据按照你指定的计算方式计算出一个结果。
  • 注意:
    • 如果没有终结操作,中间操作是不会得到执行的。
    • 一旦一个流对象经过一个终结操作后,这个流就不能再被使用。
    • 我们在流中对数据的处理,不会影响原集合数据的。

函数式接口

  • 定义:只有一个抽象方法的接口(可以加上@FunctionalInterface注解)
  • 常见的函数式接口:
    • Consumer消费接口:void accept(T t)。对传入的形参进行消费。
    • Function计算转换接口:R apply(T t)。对传入的形参计算或转换,把结果返回。
    • Predicate判断类型的接口:boolean test(T t)。对传入的参数条件进行判断,返回结果。
    • Supplier生产型接口:T get()。创建一个对象并返回。

方法引用

  • 类名或者方法名::方法名
  1. 类名::方法名(方法体中只有一行代码,并且这行代码调用了某个静态方法,抽象方法中所有的参数都按照顺序传入了这个静态方法中)
  2. 对象名::方法名(方法体中只有一行代码,并且这行代码调用了某个对象的成员方法,抽象方法中所有的参数都按照顺序传入了这个成员方法)

Lambda表达式

  • 使用前提:1.方法的参数或局部变量必须为接口。2.接口中有且仅有一个抽象方法。

并行流

  • 当流中有大量元素时,可以使用并行流提高操作的效率。
  • parallel()方法可以把串行流转换为并行流。
  • parallelStream()方法可以直接获得并行流。

新日期时间API介绍

  • LocalDate:表示日期,包含年月日,格式为2019-10-16
  • LocalTime:表示时间,包含时分秒,格式为21:18:52.121
  • LocalDateTime:表示时间日期,包含年月日,时分秒,格式为2024-06-04T21:18:52.097
  • DateTimeFormatter:时间格式化类。
  • Instant:时间戳
  • Duration:用于计算2个特定的时间瞬间
  • Period:用于计算2个日期的距离
  • ZonedDateTime:包含时区的时间