lambda表达式

一、简单介绍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;}
() -> {}

原文地址:https://www.cnblogs.com/tenWood/p/11485219.html