您好,歡迎來到賦能網(wǎng)!

java函數(shù)式編程的好處是什么?java函數(shù)式編程示例

賦能網(wǎng) 2023-05-09 68

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ù)雜的邏輯(比如:與,或,非)。

該接口用于測試對象是 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ù)式編程是種編程方式,有了它能夠減少了可變量的聲明,更好的利用并行,并且使代碼更加簡潔和可讀哦!最后大家如果想要了解更多初識java知識,敬請關(guān)注賦能網(wǎng)。


本文鏈接:

本文章“java函數(shù)式編程的好處是什么?java函數(shù)式編程示例”已幫助 68 人

免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識產(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

如果本頁不是您要找的課程,您也可以百度查找一下: