您好,登錄后才能下訂單哦!
怎么對Java8中的函數式接口進行測試?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1. 函數式接口的理解
根據重構的思想,需要把容易變化的模塊進行抽象并封裝起來,從這個點來看,Java8新引入的函數式接口就是基于這個思想進行設計的。
2. 函數式接口定義
2.1 自定義如下
需要FunctionalInterface關鍵字顯示聲明:
@FunctionalInterface public interface AppleInterface { public void test(); }
2.2 系統預定義
java.util.function.Consumer; java.util.function.Function; java.util.function.Predicate; java.util.function.Supplier;
可以去查看源碼了解具體的細節,這幾個接口包括了常用的一些場景,一般可滿足需要
3. 函數式接口的使用
函數式接口一般使用前需要先定義,也可以使用系統預定義的幾個函數式接口
函數式接口的使用和使用一個變量沒有區別,顯示聲明定義,格式如下:
FunctionInterface interface=null;
這里的interface雖然看起來是一個變量,可是實際卻是一段行為代碼,用于執行具體的業務邏輯,可以自由在方法接口間傳遞,也可以直接執行
interface.doSomeThing();
如定義函數式接口為參數的接口:
public void filter(FunctionInterface interface) { interface.doSomeThing(); }
4. 函數式接口練習
4.1 自定義實體類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 自定義函數式接口
該接口有一個test方法,不接收任何參數,也沒有任何返回
@FunctionalInterface public interface AppleInterface { public void test(); }
4.3 測試自定義函數式接口
@Test public void DefineFunctionInterface(){ //自定義函數式接口 AppleInterface at=()->System.out.println("define FunctionInterface AppleInterface."); at.test(); }
至此,就完成一個很簡單的函數式接口的定義和調用
4.4 系統預定義函數式接口
Consumer<T>:該接口接收一個對象T,返回void,測試如下
@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>:該接口不接收任何參數,返回一個對象T,測試如下:
@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>:該接口接收一個對象T,返回一個Boolean
@Test public void PredicateTest(){ //系統預定義函數式接口測試 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);//篩選藍色的蘋果 } 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>: 該接口接收一個對象T,經過轉換判斷,返回一個對象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中的函數式接口進行測試問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。