jdk8新特性
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()。创建一个对象并返回。
方法引用
- 类名::方法名(方法体中只有一行代码,并且这行代码调用了某个静态方法,抽象方法中所有的参数都按照顺序传入了这个静态方法中)
- 对象名::方法名(方法体中只有一行代码,并且这行代码调用了某个对象的成员方法,抽象方法中所有的参数都按照顺序传入了这个成员方法)
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:包含时区的时间