欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Lambda表達(dá)式和函數(shù)式接口的使用和特性

 更新時間:2023年04月20日 11:08:31   作者:_BugMan  
Java Lambda表達(dá)式是一種函數(shù)式編程的特性,可簡化匿名內(nèi)部類的寫法,與函數(shù)式接口搭配使用,實(shí)現(xiàn)代碼簡潔、可讀性高、易于維護(hù)的特點(diǎn),適用于集合操作、多線程編程等場景

1.概述

當(dāng)Java 8發(fā)布時,其中最令人興奮的特性之一就是 Lambda 表達(dá)式。Lambda 表達(dá)式是一種輕量級、簡潔和高效的函數(shù)式編程方法。它可以用來代替 Java 舊有的匿名內(nèi)部類,提高代碼的可讀性和可維護(hù)性。

2.lambda表達(dá)式的基礎(chǔ)

Lambda 表達(dá)式是一個匿名函數(shù),由輸入?yún)?shù)和處理邏輯兩部分組成:

(parameter1, parameter2, ...) -> { code block }

輸入或者輸出可以為空:

() -> System.out.println("Hello, world!")
(a) -> {}
() -> {}

多參數(shù)用括號,單參數(shù)可以不用括號:

(a,b) -> a+b
a -> System.out.print(a)

多條處理邏輯用花括號,單條處理邏輯可以不用花括號:

(a,b) -> a+b;
(a,b) -> {a+b;a-b;}

3.JAVA中的lambda表達(dá)式

要在 Java 中使用 Lambda 表達(dá)式,需要將它們賦值給一個函數(shù)式接口變量。函數(shù)式接口是只包含一個抽象方法的接口,它們提供了一種定義 Lambda 表達(dá)式類型的方式。例如,下面的函數(shù)式接口 MyInterface 包含了一個抽象方法 doSomething

interface MyInterface {
    void doSomething();
}

要使用 Lambda 表達(dá)式實(shí)現(xiàn)這個接口,只需要提供一個與 doSomething 方法簽名匹配的 Lambda 表達(dá)式即可。例如,下面的代碼使用 Lambda 表達(dá)式創(chuàng)建了一個 MyInterface 對象,并調(diào)用了它的 doSomething 方法:

MyInterface myLambda = () -> System.out.println("Hello, world!");
myLambda.doSomething();

在這個例子中,我們使用 Lambda 表達(dá)式創(chuàng)建了一個 MyInterface 對象,并將它賦值給了 myLambda 變量。然后,我們調(diào)用了 myLambda.doSomething() 方法,輸出了 Hello, world!

4.函數(shù)式接口

內(nèi)置函數(shù)式接口

概述

JDK8內(nèi)置實(shí)現(xiàn)了一些常用的函數(shù)式接口:

接口作用
Function程序中映射邏輯的抽象
Predicate程序中判斷邏輯的抽象
Consumer程序中的消費(fèi)型邏輯的抽象
Suppiler程序中的生產(chǎn)邏輯的抽象

Function

Function接口,可以定義入?yún)⒑统鰠⒌念愋?,可用于類型轉(zhuǎn)換。

代碼示例:

Function<String,Integer> function=(String i)-> Integer.parseInt(i);
System.out.println(function.apply("1")==1);

Predicate

Predicate接口,指定返回值為布爾類型,可用于斷言。

public static void main(String[] args) {
        Predicate<String> predicate = (s) -> s.length() > 0;
        // 測試字符串的長度是否>0
        System.out.println(predicate.test("hello"));
        // 結(jié)果取反
        System.out.println(predicate.negate().test("hello"));
        System.out.println("=====or / and======");
        System.out.println(predicate.test(""));
        // 增加或判斷,二者滿足其一則為true
        System.out.println(predicate.or(s -> s.equals("")).test(""));
        // 增加與判斷,二者都滿足則為true
        System.out.println(predicate.and(s -> s.equals("hello")).test(""));
        System.out.println(predicate.and(s -> s.equals("hello")).test("hello"));
        System.out.println("=====isEqual======");
        // 判斷是否相等
        System.out.println(Predicate.isEqual("hello").test(""));
        System.out.println(Predicate.isEqual("hello").test("hello"));
        Predicate<Boolean> nonNull = Objects::nonNull;
        Predicate<Boolean> isNull = Objects::isNull;
        Predicate<String> isEmpty = String::isEmpty;
        Predicate<String> isNotEmpty = isEmpty.negate();
    }

Consumer

Consumer接口,又叫消費(fèi)接口,沒有返回值,就像把輸入消費(fèi)掉了一樣。

public static void main(String[] args) {
   Consumer<Object> consumer1 = new Consumer<Object>() {
   @Override
   public void accept(Object o) {
     System.out.println("這次消費(fèi)了:" + o.toString());
     }
   };
   consumer1.accept("100w元在雙十一!這下窮死了!");
   Consumer<String> consumer2 = s -> System.out.println("這次消費(fèi)了:" + s);
   consumer2.accept("120w元在雙十二!又窮死了!");
}

Suppiler

Suppiler接口,又叫生產(chǎn)接口,可以自定義返回值,用來生產(chǎn)一些東西。

public static void main(String[] args) {
    // 生成一個字符串
    Supplier<String> supplier1 = () -> "abcde";
    // 生成一個隨機(jī)數(shù)
    Supplier<Integer> supplier2 = () -> new Random().nextInt(10);
    // 產(chǎn)生一個運(yùn)行時異常
    Supplier<RuntimeException> supplier3 = () -> new RuntimeException();
    System.out.println(supplier1.get());
    System.out.println(supplier2.get().intValue());
    System.out.println(supplier3.get());
}

5.級聯(lián)與柯里化

級聯(lián)表達(dá)式,含有多個箭頭的lambda表達(dá)式,即“套娃”lambda表達(dá)式。

以下列l(wèi)ambda表達(dá)式為例:

x->y->x+y

假設(shè)輸入的為Integer類型,

用Function接口來表達(dá)即為:

輸入一個Integer x,返回一個Integer y,

Integer y又可以用Function接口來表示為:

輸入一個Integer,返回一個Integer

Function<Integer,Function<Integer,Integer>> functionFunction= x->y->x+y;
System.out.println(functionFunction.apply(2).apply(3));

到此這篇關(guān)于Java中Lambda表達(dá)式和函數(shù)式接口的使用和特性的文章就介紹到這了,更多相關(guān)Java lambda表達(dá)式與函數(shù)式接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論