函数式编程接口
定义:函数式接口就是只定义一个抽象方法的接口
- 任何函数式接口都不允许抛出受检异常(checked exception)
Lambda延迟执行
使用Lambda表达式的重点是延迟执行,延迟执行代码的原因有很多,具体的如下:
- 在另外一个线程中运行代码
- 多次运行代码
- 在某个算法的正确时间点上运行代码,比如排序中的比较操作
- 当某些情况发生时才运行代码
- 只有在需要的时候才运行代码
常用方法
- 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>:有两个参数的布尔值函数
