1. #### 函数式接口
- 规则:一个接口且仅有一个抽象方法
- 注解:@FunctionalInterface
2. #### 函数式接口的使用
- 作为变量初始化
接口类型 变量 = lambda表达式; (参数列表) -> {}
- 作为方法参数
public static 方法名(函数式接口 变量1){
变量1.方法(参数列表);
}
方法名(lambda表达式);
- 作为方法返回值
public static 函数式接口 方法名(){
return lambda表达式;
}
3. #### JDK提供的常用的函数式接口
- Supplier<T> { T get();}
根据指定的Supplier<泛型>,通过lambda表达式一定逻辑返回指定泛型的数据
- Consumer{ void accept(T t); default andthen(Consumer con);}
消费数据,由lambda表达式进行处理
- Predicate<T> {
boolean test(T t);
default Predicate and(Predicate other);
default Predicate or(Predicate other);
default Predicate negate(Predicate other);
}
将传入参数进行逻辑处理,得到boolean值
- Function<T,R>{
R apply(T t);
default Function andThen(Function after);
}
将指定参数经过一定的逻辑处理得到转换的结果
4. #### Stream流:
- 简化对集合或者数组等的一系列操作,包含循环,过滤,统计等等
- Stream操作的三个环节
常用生成流
Collection集合的stream()的方法--- list set
Map集合借助keySet(),values,entrySet()
使用Stream类的静态方法of()对数组或者多参进行流的转化
中间操作
filter:过滤
limit:截取
skip:跳过
concat:合并
distinct:去重
sorted:
sorted(Comparator c):
map:将流转换其他类型的流
mapToInt:转换为int
终结操作
forEach:循环处理
count:统计个数
流的收集:将流中的数据收集到集合中,方便后续的使用
将流数据收集到list中: List<泛型> list = stream.collect(Collectors.toList())
将数据收集到set中: Set<泛型> set = stream.collect(Collectors.toSet())
将流数据收集到Map: Map<泛型1,泛型2> map = stream.collect(Collectors.toMap( Function keyMapper,Function valueMapper )); |
|