🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 函数式编程接口 定义:函数式接口就是只定义一个抽象方法的接口 * 任何函数式接口都不允许抛出受检异常(checked exception) #### #### Lambda延迟执行 使用Lambda表达式的重点是延迟执行,延迟执行代码的原因有很多,具体的如下: 1. 在另外一个线程中运行代码 2. 多次运行代码 3. 在某个算法的正确时间点上运行代码,比如排序中的比较操作 4. 当某些情况发生时才运行代码 5. 只有在需要的时候才运行代码 ### 常用方法 * sorted ``` Integer[] array = list.stream().sorted((dest, org) -> dest.compareTo(org)).toArray(Integer[]::new); ``` * 范例: ``` double ave = list.stream().mapToInt(t -> t.intValue()).average().getAsDouble(); list.stream().filter(t -> 4 == t).collect(Collectors.toList()); // 过滤 ``` ### 常用函数式编程接口 ``` * Predicate:java.util.function.Predicate<T>接口定义了一个名叫test的抽象方法,它接受泛型 T对象,并返回一个boolean * Consumer:java.util.function.Consumer<T> 定义了一个名叫 accept 的抽象方法, 它接受泛型 T 的对象,没有返回(void) * Function:java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象 * Runnable:作为无参数或返回值的动作运行 * Supplier<T>:提供一个T类型的值 * BiConsumer<T,U>:处理T和U类型的值 * BiFunction<T,U,R>:有T和U类型参数的函数 * UnaryOperator<T>:类型T上的一元操作符 * BinaryOperator<T>:类型T上的二元操作符 * BiPredicate<T,U>:有两个参数的布尔值函数 ``` ![](../assets/20171111235201.png)