JavaSEJDK8特性

205 阅读2分钟

JDK8

Lambda:

概念:允许把函数作为一个方法的参数。(函数作为参数传递到方法中) <函数式接口><变量名> = (参数1,参数2....) -> { //方法体 } 注意事项:

I、新的操作符 -> (箭头操作符) (1) (参数1,参数2) -> 表示参数列表 (2) -> { } 方法体

II、形参列表的数据类型会自动推断

III、如果形参列表为空,只需保留()

IV、 如果形参只有1个,()可以省略,只要参数名字即可

V、如果执行语句只有1句,且无返回值,{}可以省略

VI、若有返回值,仍相省略{},return 也省略。保证执行语句只有1句

VII、Lambda表达式不会产生单独的内部类文件

VIII、Lambda访问局部变量时,变量要修饰final,如果没加,会自动添加

函数式接口:

I、如果一个接口只有一个抽象方法,则该接口称为函数式接口。 II、为了确保接口达到要求,可以添加@FuctionalInterface注解。 III、内置四个核心函数式接口: (1)Consumer 消费型接口 void accept(T t) (2) Supplier 供给型接口 T get(); (3) Function<T,R> 函数型接口 R apply(T t); (4)Predicate 断言型接口 boolean test(T t); 方法引用: I、 方法引用是Lambda表达式的一种简写形式,如果Lambda表达式方法体重只是一个调用一个特定的已存在的方法,则可以使用方法引用。

II、使用 :: 操作符将对新啊或类和方法名的名字分割开来。

Supplier<Employee> supp =Employee::new;//方法引用

(1)对象 :: 实例方法

(2)类 :: 静态方法

(3)类 :: 实例方法

(4)类 :: new

III、注意:调用的方法参数列表与返回值类型,要与函数型接口中的方法参数列表与返回值类型一致。

Stream API:

I、Stream是Java8中处理数组、集合的抽象概念。

II、可以执行非常复杂的查找、过滤、映射等操作。

常用方法(中间操作):

Stream filter(Predicate<? super T>predicate);

Stream limit(Long maxSize);截断,不超过给定数量

Stream distinct(); 筛选 ,利用hashcode和equals

Stream map(Function<? super T,? extends R> mapper);

Stream sorted(); 自然排序

Stream sorted(Comparator<? super T>comparator);定制排序

常用方法(终止操作):

long count();返回流中元素的总个数

void forEach(Consumer<? super T>action);遍历

boolean anyMatch(Predicate<? super T>predicate);是否至少匹配一个

boolean allMatch(Predicate<? super T>predicate);是否匹配所有元素

boolean noneMathc(Predicate<? super T> prdicate);是否没有匹配

Optional findFirst();返回第一个

Optional findAny();返回任意

Optional min(Comparatot<? super T>comparator);返回最小

Optional max(Comparator<? super T> comparator);返回最大