一、简单介绍lambda表达式
lambda接口满足的条件:接口有且只有一个方法,default方法、static方法除外,@FunctionalInterface会告诉编译器编译的时候判断方法到底是不是一个function的接口,标注了@FunctionalInterface的接口,如果下面方法不满足,会报错。
java中很多的以前的方法都加了@FunctionalInterface,比如Runnable接口、Comparator
1.lambda的的语法。
2.在哪里如何使用lambda。
3.execute around pattern
4.Functional interfaces
5.Method references方法引用
6.Type interface类型推导。
7.Composing lambdas 组合lambda表达式。
lambda可以很清晰的定义、代表一个匿名函数。它没有名字,但是它有一系列的参数,body,返回值类型,也有可能有一系列的异常被抛出。
匿名的
函数式的
可以被传递的
清晰的。
二、lambda表达式的语法构成:
parameter list arrow lambda body
(o1, o2) -> o1.getColor().compareTo(o2.getColor());
三、举例子:
Apple.java:
package com.cy.java8; import lombok.Data; @Data public class Apple { private String color; private long weight; public Apple(String color, long weight) { this.color = color; this.weight = weight; } }
LambdaExperssion.java
package com.cy.java8; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; public class LambdaExperssion { public static void main(String[] args) { // 以前怎么写的,比如给Apple排序 Comparator<Apple> byColor = new Comparator<Apple>() { @Override public int compare(Apple o1, Apple o2) { return o1.getColor().compareTo(o2.getColor()); } }; List<Apple> appleList = Collections.emptyList(); appleList.sort(byColor); // 用lambda表达式 Comparator<Apple> byColor2 = (o1, o2) -> o1.getColor().compareTo(o2.getColor()); Function<String, Integer> fLambda = s -> s.length(); /** * 一步步的简化 * 去掉花括号 * 只有1个参数,可以去掉参数列表的括号 */ Predicate<Apple> p = (Apple a) -> { return a.getColor().equals("green"); }; Predicate<Apple> p1 = (Apple a) -> a.getColor().equals("green"); Predicate<Apple> p2 = a -> a.getColor().equals("green"); //这两个等价 Predicate<Apple> p3 = a -> a.getColor().equals("green"); Function<Apple, Boolean> f = a -> a.getColor().equals("green"); Runnable r = () -> {}; Supplier<Apple> s = () -> new Apple("green", 2); System.out.println(s.get()); } }
总结下lambda表达式的语法:
(parameters) -> expression
(parameters) -> {statments;}
() -> {}