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);返回最大