函数式接口
规则:一个接口且仅有一个抽象方法
注解:@FunctionalInterface
函数式接口的使用
作为变量初始化 接口类型 变量 = lambda表达式; (参数列表) -> {}
作为方法参数 public static 方法名(函数式接口 变量1){ 变量1.方法(参数列表); } 方法名(lambda表达式);
作为方法返回值 public static 函数式接口 方法名(){ return lambda表达式; }
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); } 将指定参数经过一定的逻辑处理得到转换的结果
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 )); |
|