java引入了函數(shù)式編程,這表示Java從此不在是一個(gè)單純的面向?qū)ο笳Z言,現(xiàn)在它又同時(shí)混合了函數(shù)式編程。那java函數(shù)式編程的好處是什么?下面來我們就來給大家講解一下。
從代碼的可維護(hù)性上講,函數(shù)式編程最大的好處是引用透明,即函數(shù)運(yùn)行的結(jié)果只依賴于輸入的參數(shù),而不依賴于外部狀態(tài),因此,我們常常說函數(shù)式編程沒有副作用。
沒有副作用有個(gè)巨大的好處,就是函數(shù)內(nèi)部無狀態(tài),即輸入確定,輸出就是確定的,容易測試和維護(hù)。
以下是java函數(shù)式編程示例:
1.不使用內(nèi)置接口,消費(fèi)型接口示例
我們自己定義了一個(gè)消費(fèi)型的接口。
// 如果不使用內(nèi)置函數(shù)接口,消費(fèi)型接口例子 interface SpendMoney { void buy(double money); } class Test04 { public static void buySomething(double money, SpendMoney sm) { sm.buy(money); } public static void main(String[] args) { buySomething(1999, new SpendMoney() { @Override public void buy(double money) { System.out.println("我買了件大衣!!!花了" + money + "元錢"); } }); } }
2.使用內(nèi)置函數(shù)式接口Consumer示例
已經(jīng)存在了內(nèi)置函數(shù)式接口,我們就沒必要再定義自己的接口,顯得多余。
class Test05 { public static void buySomething(double money, Consumersm) { sm.accept(money); } public static void main(String[] args) { buySomething(999, new Consumer() { @Override public void accept(Double o) { System.out.println("我買了件大衣!!!花了" + o + "元錢"); } }); // 用lambda表達(dá)優(yōu)化 buySomething(999, o - > System.out.println("我買了件大衣!!!花了" + o + "元錢")); } }
3.使用斷言型接口示例
Predicate 接口是一個(gè)函數(shù)式接口,它接受一個(gè)輸入?yún)?shù) T,返回一個(gè)布爾值結(jié)果。
該接口包含多種默認(rèn)方法來將Predicate組合成其他復(fù)雜的邏輯(比如:與,或,非)。
該接口用于測試對(duì)象是 true 或 false。
我們可以通過以下實(shí)例(Java8Tester.java)來了解函數(shù)式接口 Predicate 的使用:
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Java8Tester { public static void main(String args[]) { Listlist = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); // Predicatepredicate = n -> true // n 是一個(gè)參數(shù)傳遞到 Predicate 接口的 test 方法 // n 如果存在則 test 方法返回 true System.out.println("輸出所有數(shù)據(jù):"); // 傳遞參數(shù) n eval(list, n - > true); // Predicatepredicate1 = n -> n%2 == 0 // n 是一個(gè)參數(shù)傳遞到 Predicate 接口的 test 方法 // 如果 n%2 為 0 test 方法返回 true System.out.println("輸出所有偶數(shù):"); eval(list, n - > n % 2 == 0); // Predicatepredicate2 = n -> n > 3 // n 是一個(gè)參數(shù)傳遞到 Predicate 接口的 test 方法 // 如果 n 大于 3 test 方法返回 true System.out.println("輸出大于 3 的所有數(shù)字:"); eval(list, n - > n > 3); } public static void eval(Listlist, Predicatepredicate) { for (Integer n: list) { if (predicate.test(n)) { System.out.println(n + " "); } } } }
輸出結(jié)果:
輸出所有數(shù)據(jù): 1 2 3 4 5 6 7 8 9 輸出所有偶數(shù): 2 4 6 8 輸出大于 3 的所有數(shù)字: 4 5 6 7 8 9
函數(shù)式編程是種編程方式,有了它能夠減少了可變量的聲明,更好的利用并行,并且使代碼更加簡潔和可讀哦!最后大家如果想要了解更多初識(shí)java知識(shí),敬請關(guān)注賦能網(wǎng)。
本文鏈接:
本文章“java函數(shù)式編程的好處是什么?java函數(shù)式編程示例”已幫助 68 人
免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579