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;}
() -> {}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章