学习**Java8**之前,肯定得对lamada表达式有所了解的。
Lambda表达式可以认为是对匿名内部类的一种简化,但不是所有的匿名内部类都可以简化为Lambda表达式。只有函数式接口的匿名内部类才可以使用**Lambda**表达式来进行简化。函数式接口不同于普通接口,较为特殊化。接口当中只有一个抽象方法是需要我们去实现的,Lambda表达式正好是针对这个唯一的抽象方法使用。
语法格式:
参数列表 箭头 方法体 总结:(参数列表)->{方法体}
- 参数类型可以省略。 但是有多个参数的情况下,不能只省略一个
- 如果参数有且仅有一 个,那么小括号可以省略
- 如果代码块的语句只有一 条,可以省略大括号和分号,甚至是return
总结:
- Lamada表达式可以理解为一种匿名函数:他没有名称,但有参数列表、函数主体、返回类型,可能还会有一个可以抛出的异常列表。
- Lamada表达式可以让你的代码更加简洁的传递代码。
- 函数式接口就是仅仅声明了一个抽象方法的接口。
- 只有在接受函数式接口的地方才可以使用Lamada表达式。
- Lamada表达式允许你直接内联,为函数式接口的抽象方法提供实现,并且将整个表达式作为函数式接口的一个实例。
- Java8自带一些常用的函数式接口、放在java.util.function包里,包括Predicate、Function<T、R>、Supplier、Consumer、&&BinaryOperator。
- 为了避免装箱操作,对Predicate、Function<T、R>等通用的函数式接口的原始类型特化:IntPredicate、IntToLongFuncation等。
- 环绕执行模式(即在方法所必须的代码中间,你需要执行点什么操作,比如分配资源和清理)可以配合Lamada提高灵活性和可重要性。
- Lamada表达式所需要代表的类型称为目标类型。
- 方法引用让你重复使用现有的方法实现并传递他们。
- Comparator、Predicate 和Funcation等函数式接口都有几个可以用来结合lamada表达式的默认方法