一、簡述
Funciton开皿、Consumer涧黄、Predicate是Java8中的新特性。他們都是函數(shù)式接口赋荆,位于java.util包中笋妥。
關(guān)于函數(shù)式接口,其外部特征是類上使用@FunctionalInterface注解窄潭。它有以下特點(diǎn):
- 只能注解到有且僅有一個抽象方法的類上春宣。
- 接口顯示聲明或覆蓋了java.lang.Object類中方法的方法也不算做抽象方法。
- Java8接口中static方法與default方法不算抽象方法。
他們各自的使用場景如下:
- Function
需要執(zhí)行目標(biāo)方法后得到返回值月帝。
接口修飾:
@FunctionalInterface
public interface Function<T, R>{}
該類需要設(shè)置兩個泛型躏惋,T為入?yún)㈩愋停琑為返回值類型嚷辅。
主要方法:
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);
- Consumer
僅需要執(zhí)行目標(biāo)方法簿姨,不需要得到返回值。
接口修飾:
@FunctionalInterface
public interface Consumer<T>{}
該類需要設(shè)置一個泛型簸搞,T為參數(shù)類型扁位。
主要方法:
/**
* 對給定的參數(shù)執(zhí)行此操作。
*
* @param t 入?yún)? */
void accept(T t);
- Predicate
經(jīng)過比較趁俊,得到比較邏輯執(zhí)行過后的結(jié)果域仇,其返回類型為true、false则酝。
接口修飾:
@FunctionalInterface
public interface Predicate<T>{}
該類需要設(shè)置一個泛型殉簸,T為參數(shù)類型闰集。
主要方法:
/**
* 根據(jù)給定參數(shù)比較
*
* @param t 入?yún)? * @return {@code true} 滿足條件返回true,
* otherwise {@code false}
*/
boolean test(T t);
二沽讹、實(shí)例
1、輸入數(shù)字3武鲁,得到輸入值加100的結(jié)果并轉(zhuǎn)為字符創(chuàng)爽雄,并返回。
# 定義函數(shù)執(zhí)行方法
Function<Integer, String> func = o -> {return String.valueOf((o + 100));};
# 傳入3沐鼠,執(zhí)行方法挚瘟,獲取返回結(jié)果
String result = func.apply(3);
System.out.println("result : " + result);
結(jié)果:
2、輸入字符“hello”饲梭,拼接字符串“ word”并輸出乘盖。
Consumer<String> consumer = o -> {System.out.println(o + " world");};
consumer.accept("hello");
結(jié)果:
3、輸入字符串“hello”憔涉,判斷長度是否等于5订框。
Predicate<String> predicate = o -> {return o.length() == 5;};
boolean test = predicate.test("hello");
System.out.println("result : " + test);
結(jié)果: