C++,C#疏魏,Python等各個(gè)編程語(yǔ)言早已經(jīng)支持lambda表達(dá)式了单刁,Java從java8開(kāi)始也支持Lambda表達(dá)式了,其中在java.util.function 包中提供給我們一些最常用的函數(shù)式接口胧卤。
四個(gè)最基本的函數(shù)式接口
Function<T, R>:R apply(T t) 輸入類型T返回類型R。
Consumer<T>:void accept(T t) 輸入類型T拼岳,“消費(fèi)”掉枝誊,無(wú)返回。
Predicate<T>:boolean test(T t) 輸入類型T惜纸,并進(jìn)行條件“判斷”叶撒,返回true|false绝骚。
Supplier<T>:T get() 無(wú)輸入,“生產(chǎn)”一個(gè)T類型的返回值祠够。
基本數(shù)據(jù)類型的函數(shù)式接口
上面的四個(gè)接口因?yàn)槭褂梅盒脱雇簦琂ava泛型不支持基本數(shù)據(jù)類型,又因?yàn)榛緮?shù)據(jù)類型與引用類型頻繁的拆裝箱將會(huì)嚴(yán)重影響效率古瓤,所以有Java還提供了幾個(gè)基本數(shù)據(jù)類型的函數(shù)式接口:
double類型的函數(shù)式接口
DoubleFunction<R>:R apply(double value);
DoubleConsumer:void accept(double value);
DoublePredicate:boolean test(double value);
DoubleSupplier:double getAsDouble();
int類型的函數(shù)式接口
IntFunction<R>:R apply(int value);
IntConsumer:void accept(int value);
IntPredicate:boolean test(int value);
IntSupplier:int getAsInt();
long類型的函數(shù)式接口
LongFunction<R>:R apply(long value);
LongConsumer:void accept(long value);
LongPredicate:boolean test(long value);
LongSupplier:long getAsLong();
boolean類型的函數(shù)式接口
BooleanSupplier:boolean getAsBoolean();
二元函數(shù)式接口
BiFunction<T, U, R>:R apply(T t, U u);
BiConsumer<T, U>:void accept(T t, U u);
BiPredicate<T, U>:boolean test(T t, U u);
Lambda表達(dá)式語(yǔ)法
(int x, int y) -> { return x + y; }
其中(int x, int y)為參數(shù)列表止剖, {return x + y}為函數(shù)體,中建用箭頭“->”連接起來(lái)落君。下面列舉一些示例:
// 多個(gè)參數(shù)
(type1 arg1, type2 arg2...) -> { body }
(int a, int b) -> { return a + b; }
// 可以顯式聲明參數(shù)的類型穿香,也可以從上下文推斷參數(shù)的類型。
(arg1, arg2...) -> { body }
(a, b) -> { return a + b; }
// 一個(gè)參數(shù)
(a) -> { return a * a; }
// 參數(shù)列表只有一個(gè)參數(shù)可以省略:參數(shù)列表的小括號(hào)
a -> { return a * a; }
// 方法體只有一條語(yǔ)句可以省略:方法體大括號(hào)以及return關(guān)鍵字
a -> a * a;
// 沒(méi)有參數(shù)绎速,需要用一對(duì)空括號(hào)來(lái)表示
() -> return 1;