介绍
一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口
,Java8引入的新概念。
一般用注解@FunctionalInterface
标注(非必须),例如:
1 |
|
Lambda表达式的目标类型(target type)
是函数接口(function interface)
1 |
|
Lambda表达式也可以被看做是一个Object
,前提是必须转型为一个函数接口
,例如:
1 |
|
JDK预定义了一些函数接口,在包java.util.function下,比如:Runnable
、Callable
、Function
、Supplier
、Consumer
、BiComsumer
和Predicate
、UnaryOperator
等
使用
基本用法
1 |
|
内部类
Lambda表达式主要用于替换以前广泛使用的内部匿名类,比如回调和Runnable等。
1 |
|
集合类批处理操作
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
函数式编程
stream
:一个流通常以一个集合类实例为其数据源,然后在其上定义各种操作。
pipeline
:流的API设计使用了管道(pipelines)模式,对流的一次操作会返回另一个流。
lazy
:不会实时执行(管道贯通式)。
eager
:实时执行,并且会触发lazy的执行。
forEach(Consumer),map(Function),filter(Predicate),distinct(),toMap(Function, Function),groupBy(Function, Collector),
reduce(),sum(),max(),min()
常用函数接口
Runnable
1 |
|
Callable
1 |
|
Function
1 |
|
DoubleFunction、DoubleToIntFunction、DoubleToLongFunction、IntFunction、IntToDoubleFunction、IntToLongFunction、LongFunction
UnaryOperator
操作数和结果类型相同的Function,细分接口包括:DoubleUnaryOperator、IntUnaryOperator等
BiFunction
1 |
|
BinaryOperator
操作数和结果相同类型的BiFunction,细分接口包括:IntBinaryOperator、DoubleBinaryOperator、LongBinaryOperator
Supplier
1 |
|
DoubleSupplier、BooleanSupplier、IntSupplier
Consumer
1 |
|
DoubleConsumer、IntConsumer、LongConsumer
BiConsumer
1 |
|
Predicate
1 |
|
DoublePredicate、IntPredicate、
BiPredicate
1 |
|