基于Java8 函數(shù)式接口理解及測(cè)試
1. 函數(shù)式接口的理解
根據(jù)重構(gòu)的思想,需要把容易變化的模塊進(jìn)行抽象并封裝起來,從這個(gè)點(diǎn)來看,Java8新引入的函數(shù)式接口就是基于這個(gè)思想進(jìn)行設(shè)計(jì)的。
2. 函數(shù)式接口定義
2.1 自定義如下
需要FunctionalInterface關(guān)鍵字顯示聲明:
@FunctionalInterface public interface AppleInterface { public void test(); }
2.2 系統(tǒng)預(yù)定義
java.util.function.Consumer; java.util.function.Function; java.util.function.Predicate; java.util.function.Supplier;
可以去查看源碼了解具體的細(xì)節(jié),這幾個(gè)接口包括了常用的一些場(chǎng)景,一般可滿足需要
3. 函數(shù)式接口的使用
函數(shù)式接口一般使用前需要先定義,也可以使用系統(tǒng)預(yù)定義的幾個(gè)函數(shù)式接口
函數(shù)式接口的使用和使用一個(gè)變量沒有區(qū)別,顯示聲明定義,格式如下:
FunctionInterface interface=null;
這里的interface雖然看起來是一個(gè)變量,可是實(shí)際卻是一段行為代碼,用于執(zhí)行具體的業(yè)務(wù)邏輯,可以自由在方法接口間傳遞,也可以直接執(zhí)行
interface.doSomeThing();
如定義函數(shù)式接口為參數(shù)的接口:
public void filter(FunctionInterface interface) { interface.doSomeThing(); }
4. 函數(shù)式接口練習(xí)
4.1 自定義實(shí)體類Apple
public class Apple { private String color; private float weight; public Apple(String color, float weight) { this.color = color; this.weight = weight; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } }
4.2 自定義函數(shù)式接口
該接口有一個(gè)test方法,不接收任何參數(shù),也沒有任何返回
@FunctionalInterface public interface AppleInterface { public void test(); }
4.3 測(cè)試自定義函數(shù)式接口
@Test public void DefineFunctionInterface(){ //自定義函數(shù)式接口 AppleInterface at=()->System.out.println("define FunctionInterface AppleInterface."); at.test(); }
至此,就完成一個(gè)很簡(jiǎn)單的函數(shù)式接口的定義和調(diào)用
4.4 系統(tǒng)預(yù)定義函數(shù)式接口
Consumer<T>:該接口接收一個(gè)對(duì)象T,返回void,測(cè)試如下
@Test public void ConsumerTest(){ Consumer<Apple> consumer=(Apple app)->{System.out.println(app.getColor()+","+app.getWeight());}; List<Apple> apps=Arrays.asList(new Apple("red", 120),new Apple("blue", 80), new Apple("green",100)); ConsumerApple(apps,consumer); } public void ConsumerApple(List<Apple> apps,Consumer<Apple> c){ for(Apple app:apps){ c.accept(app); } }
Supplier<T>:該接口不接收任何參數(shù),返回一個(gè)對(duì)象T,測(cè)試如下:
@Test public void SupplierTest(){ Supplier<Apple> supplier=()->{return new Apple("hello supplier",999);}; Apple app=supplier.get(); System.out.println(app.getColor()+","+app.getWeight()); }
Predicate<T>:該接口接收一個(gè)對(duì)象T,返回一個(gè)Boolean
@Test public void PredicateTest(){ //系統(tǒng)預(yù)定義函數(shù)式接口測(cè)試 Predicate<Apple> p1=(Apple a)->{if(a.getWeight()>90) return true;return false;}; Predicate<Apple> p2=(Apple a)->{if(a.getColor().equals("blue")) return true;return false;}; List<Apple> apps=Arrays.asList(new Apple("red", 120),new Apple("blue", 80), new Apple("green",100)); filterApple(apps,p1);//篩選重量大于90g的蘋果 filterApple(apps,p2);//篩選藍(lán)色的蘋果 } public void filterApple(List<Apple> apps,Predicate<Apple> p){ for(Apple app:apps){ if(p.test(app)){ System.out.println(app.getColor()+","+app.getWeight()); } } }
Function<T,R>: 該接口接收一個(gè)對(duì)象T,經(jīng)過轉(zhuǎn)換判斷,返回一個(gè)對(duì)象R
@Test public void FunctionTest(){ Function<String,Apple> function=(String s)->{return new Apple(s,666);}; Apple app=function.apply("red"); System.out.println(app.getColor()+","+app.getWeight()); app=function.apply("green"); System.out.println(app.getColor()+","+app.getWeight()); }
以上這篇基于Java8 函數(shù)式接口理解及測(cè)試就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用idea搭建spring項(xiàng)目,利用xml文件的形式進(jìn)行配置方式
本文介紹了如何使用SpringIOC和SpringDI的思想開發(fā)一個(gè)打印機(jī)模擬程序,實(shí)現(xiàn)了靈活配置彩色墨盒或灰色墨盒以及打印頁面大小的功能,通過創(chuàng)建接口和實(shí)現(xiàn)類,并在配置文件中進(jìn)行依賴注入,實(shí)現(xiàn)了控制反轉(zhuǎn)2024-11-11java實(shí)現(xiàn)TCP socket和UDP socket的實(shí)例
這篇文章主要介紹了本文主要介紹了java實(shí)現(xiàn)TCP socket和UDP socket的實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02關(guān)于SpringMVC對(duì)Restful風(fēng)格的支持詳解
Restful就是一個(gè)資源定位及資源操作的風(fēng)格,不是標(biāo)準(zhǔn)也不是協(xié)議,只是一種風(fēng)格,是對(duì)http協(xié)議的詮釋,下面這篇文章主要給大家介紹了關(guān)于SpringMVC對(duì)Restful風(fēng)格支持的相關(guān)資料,需要的朋友可以參考下2022-01-01Java異常中toString()和getMessage()區(qū)別
在java異常體系中,要打印異常信息,可以通過:e.getMessage() 、 e.toString() e.printStackTrace() 等方法打印,本文主要介紹了Java異常中toString()和getMessage()區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01