Java8 in action----函数与lambda(一)

一、@FunctionalInterface,标注为此注解的接口表明该接口为函数式接口,也就是仅定义一个抽象方法。如果定义多个方法,编译器会报错。此注解不是必须,但是是比较好的最佳实践。类似与@Override注解,表明此方法被重写。

二、方法引用适用场景:

  1. 任何静态方法
Integer.parseInt(s)

替换为: Integer::pasrInt
  1. 指向任意类型实例方法。如:
lambda:(Function)
(String s) -> s.length()

替换为:String::length
  1. lambda中调用已经存在一个外部对象.
() ->  expensiveTransaction.getValue()

替换为
expensiveTransaction::getValue

三、主要的jdk自带的接口有:
Consumer: (T t) -> void
Predicate: (T t) > boolean
Function: (T t) -> R r
Supplier: () -> T t
UnaryOperator: (T t) -> T t
BinaryOperator:(T t1, T t2) -> T t
BiPredicate: (L l, R r ) -> boolean
BiFunction: (T t, U u) -> R r
BiConsumer: (T t, U u) -> void

以上函数式接口为了防止自动装箱,都有专门的版本,如IntConsumer,IntPredicate等接口。

你可能感兴趣的:(Java8 in action----函数与lambda(一))