學(xué)習(xí)札記-Java8系列-4-內(nèi)置函數(shù)式接口
常用的內(nèi)置函數(shù)式接口
JDK提供了大量常用的函數(shù)式接口以豐富Lambda的典型使用場景秩冈,它們主要在java.util.function包中被提供。
上面用到過的Consumer接口就是其中之一,接下來給大家介紹下其他的常用函數(shù)式接口
代碼演示
public class FunctionDemo {
// 函數(shù)式接口類型 參數(shù)類型 返回類型 說明
// Consumer<T>消費(fèi)型接口 T void 對(duì)類型為T的對(duì)象操作,方法:void accept(T t)
@Test
public void test1() throws Exception {
shop(10000.0, new Consumer<Double>() {
@Override
public void accept(Double money) {
System.out.println("購買電腦花費(fèi):" + money + "元");
}
});
shop(5000.0, money-> System.out.println("購買手機(jī)花費(fèi):" + money + "元"));
}
public static void shop(Double money, Consumer<Double> con) {
con.accept(money);
}
//===================================================================================
// 函數(shù)式接口類型 參數(shù)類型 返回類型 說明
// Supplier<T>供給型接口 無 T 返回類型為T的對(duì)象篷帅,方法:T get();可用作工廠
@Test
public void test2() throws Exception {
String code = getCode(4, ()-> new Random().nextInt(10));
System.out.println(code);
}
//獲取指定位數(shù)的驗(yàn)證碼
public String getCode(int num, Supplier<Integer> sup){
String str = "";
for (int i = 0; i <num ; i++) {
str += sup.get();
}
return str;
}
//===================================================================================
// 函數(shù)式接口類型 參數(shù)類型 返回類型 說明
// Function<T, R>函數(shù)型接口 T R 對(duì)類型為T的對(duì)象操作骇陈,并返回結(jié)果是R類型的對(duì)象。方法:R apply(T t);
@Test
public void test3() throws Exception {
int length = getStringRealLength(" www.wolfcode.cn ", str -> str.trim().length());
System.out.println(length);
}
public int getStringRealLength(String str,Function<String,Integer> fun){
return fun.apply(str);
}
//===================================================================================
// 函數(shù)式接口類型 參數(shù)類型 返回類型 說明
// Predicate<T>斷言型接口 T boolean 判斷類型為T的對(duì)象是否滿足條件鼻由,并返回boolean 值。方法boolean test(T t);
@Test
public void test4() throws Exception {
List<String> list = getString(Arrays.asList("Java8","Lambda","wolfcode"), s -> s.length() > 5);
System.out.println(list);
//后面學(xué)習(xí)了Stream API操作更簡單
Arrays.asList("Java8","Lambda","wolfcode").stream().filter(s -> s.length() > 5).forEach(System.out::println);
}
//獲取集合中長度大于5的字符串
public List<String> getString(List<String> list, Predicate<String> pre){
List<String> newList = new ArrayList<>();
for (String string : list) {
if (pre.test(string)) {
newList.add(string);
}
}
return newList;
}
}
其他函數(shù)式接口
當(dāng)然Java8中還提供了很多各種用途的函數(shù)式接口,大家可以自己去探索
可以從java.util.function包下查看所有的函數(shù)式接口