最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺出理解Java Lambda表達(dá)式之四大核心函數(shù)式的用法與范例

 更新時間:2021年11月11日 10:11:00   作者:張起靈-小哥  
Lambda 表達(dá)式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。Lambda 允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。使用 Lambda 表達(dá)式可以使代碼變的更加簡潔緊湊,今天小編帶你理解Lambda表達(dá)式之四大核心函數(shù)式的用法,感興趣的朋友快來看看吧

1.四大核心函數(shù)式接口

上一篇文章中說到了Lambda表達(dá)式中的基本語法,以及我們?nèi)绾巫远x函數(shù)式接口。但是在寫代碼的過程中,大家可能會發(fā)現(xiàn)一個問題:當(dāng)我們有一個新的需求時,可以去自定義一個函數(shù)式接口,然后再創(chuàng)建一個它的實現(xiàn)類定義一些相關(guān)的業(yè)務(wù)邏輯行為。那么如果說我們有很多需求、這些需求可能還會不斷地變化,那么我們豈不是每次都要去創(chuàng)建新的實現(xiàn)類、同時再去修改之前創(chuàng)建好的實現(xiàn)類中的業(yè)務(wù)代碼?這可太麻煩了吧。。。

所以呢,Java8就為我們提供了四大核心函數(shù)式接口,使用起來非常的方便。

1.1 Consumer<T> : 消費型接口

package com.szh.java8;
 
import org.junit.Test;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
 
/*
 * 
 */
public class MyTest3 {
 
    //Consumer<T> : 消費型接口
    @Test
    public void test1() {
        happy(6666.66,(m) -> System.out.println("本地雙11共消費 " + m + " 元?。。?));
    }
 
    public void happy(double money, Consumer<Double> consumer) {
        consumer.accept(money);
    }
 
}

1.2 Supplier<T> : 供給型接口

package com.szh.java8;
 
import org.junit.Test;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
 
/*
 *
 */
public class MyTest3 {
 
    //Supplier<T> : 供給型接口
    @Test
    public void test2() {
        List<Integer> numList = getNumList(10, () -> (int)(Math.random() * 100));
        for (Integer num : numList) {
            System.out.println(num);
        }
    }
 
    public List<Integer> getNumList(int num, Supplier<Integer> supplier) {
        List<Integer> list = new ArrayList<>();
 
        for (int i = 0; i < num; i++) {
            Integer n = supplier.get();
            list.add(n);
        }
 
        return list;
    }
 
}

1.3 Function<T, R> : 函數(shù)型接口

package com.szh.java8;
 
import org.junit.Test;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
 
/*
 * 
 */
public class MyTest3 {
 
    //Function<T, R> : 函數(shù)型接口
    @Test
    public void test3() {
        String trimStr = strHandler("\t\t\t  張起靈-小哥   ", (str) -> str.trim());
        System.out.println(trimStr);
 
        String newStr = strHandler("我喜歡看盜墓筆記呀?。?!",(str) -> str.substring(4,8));
        System.out.println(newStr);
    }
 
    public String strHandler(String str, Function<String,String> function) {
        return function.apply(str);
    }
 
}

1.4 Predicate<T> : 斷言型接口

package com.szh.java8;
 
import org.junit.Test;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
 
/*
 *
 */
public class MyTest3 {
 
    //Predicate<T> : 斷言型接口
    @Test
    public void test4() {
        List<String> list = Arrays.asList("Hello","張起靈-小哥","HashMap","jdk8","List","Set");
        List<String> stringList = filterStr(list, (s) -> s.length() > 5);
 
        for (String string : stringList) {
            System.out.println(string);
        }
    }
 
    public List<String> filterStr(List<String> strings, Predicate<String> predicate) {
        List<String> strList = new ArrayList<>();
 
        for (String str : strings) {
            if (predicate.test(str)) {
                strList.add(str);
            }
        }
 
        return strList;
    }
}

除此之外,還有一些其他的函數(shù)式接口,它們有一部分是上面提到的四大核心函數(shù)式接口的子接口。

2.方法引用

當(dāng)要傳遞給Lambda體的操作,已經(jīng)有實現(xiàn)的方法了,可以使用方法引用! 方法引用:使用操作符 “ :: ” 將方法名和對象或類的名字分隔開來。

如下三種主要使用情況 :

  • 對象 :: 實例方法
  • 類 :: 靜態(tài)方法
  • 類 :: 實例方法

可以將方法引用理解為 Lambda 表達(dá)式的另外一種表現(xiàn)形式,方法引用所引用的方法的參數(shù)列表與返回值類型,需要與函數(shù)式接口中抽象方法的參數(shù)列表和返回值類型保持一致!

2.1 對象 :: 實例方法

    @Test
    public void test1() {
        Consumer<String> con1 = (str) -> System.out.println(str);
        con1.accept("Hello World!!!");
 
        PrintStream ps = System.out;
        Consumer<String> con2 = ps::println;
        con2.accept("Hello Java8!!!");
 
        Consumer<String> con3 = System.out::println;
        con3.accept("Hello Lambda!!!");
    }

    @Test
    public void test2() {
        Employee emp = new Employee();
        emp.setName("張起靈");
        emp.setAge(18);
 
        Supplier<? extends Object> sup1 = () -> emp.getName();
        String str = (String) sup1.get();
        System.out.println(str);
 
        Supplier<Integer> sup2 = emp::getAge;
        Integer age = sup2.get();
        System.out.println(age);
    }
package com.szh.java8;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
/**
 *
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
 
    private Integer id;
    private String name;
    private Integer age;
    private Double salary;
 
    public Employee(Integer id) {
        this.id = id;
    }
 
    public Employee(Integer id,String name) {
        this.id = id;
        this.name = name;
    }
 
}

2.2 類 :: 靜態(tài)方法

    @Test
    public void test3() {
        Comparator<Integer> com1 = (x,y) -> Integer.compare(x,y);
        System.out.println(com1.compare(10, 20));
 
        Comparator<Integer> com2 = Integer::compare;
        System.out.println(com2.compare(300, 110));
    }

2.3 類 :: 實例方法

若 Lambda 的參數(shù)列表的第一個參數(shù)是實例方法的調(diào)用者,第二個參數(shù)(或無參)是實例方法的參數(shù)時,格式: ClassName::MethodName

    @Test
    public void test4() {
        BiPredicate<String,String> bp1 = (str1,str2) -> str1.equals(str2);
        System.out.println(bp1.test("Hello", "hello"));
 
        BiPredicate<String,String> bp2 = String::equals;
        System.out.println(bp2.test("Java", "Java"));
    }

3.構(gòu)造器引用

格式 : ClassName::new

與函數(shù)式接口相結(jié)合,自動與函數(shù)式接口中方法兼容。構(gòu)造器的參數(shù)列表,需要與函數(shù)式接口中參數(shù)列表保持一致!

代碼中Employee類參考上面的案例。

    @Test
    public void test5() {
        //無參構(gòu)造器
        Supplier<Employee> sup1 = () -> new Employee();
        System.out.println(sup1.get());
 
        //無參構(gòu)造器
        Supplier<Employee> sup2 = Employee::new;
        System.out.println(sup2.get());
 
        //一個參數(shù)構(gòu)造器
        Function<Integer,Employee> function = Employee::new;
        Employee employee = function.apply(1001);
        System.out.println(employee);
 
        //兩個參數(shù)構(gòu)造器
        BiFunction<Integer,String,Employee> biFunction = Employee::new;
        Employee emp = biFunction.apply(1001, "張起靈");
        System.out.println(emp);
    }

4.數(shù)組引用

格式 :類型[] :: new

    @Test
    public void test6() {
        Function<Integer,String[]> fun = (x) -> new String[x];
        String[] strings = fun.apply(10);
        System.out.println(strings.length);
 
        Function<Integer,String[]> fun2 = String[]::new;
        String[] strArray = fun2.apply(50);
        System.out.println(strArray.length);
    }

以上就是深入淺出理解Java Lambda表達(dá)式之四大核心函數(shù)式的用法與范例的詳細(xì)內(nèi)容,更多關(guān)于Java Lambda表達(dá)式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java基礎(chǔ)篇之List集合舉例詳解

    Java基礎(chǔ)篇之List集合舉例詳解

    Java中的List集合是一種常用的數(shù)據(jù)結(jié)構(gòu),它提供了一種有序、可重復(fù)的元素集合,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)篇之List集合的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Java 實戰(zhàn)項目之在線點餐系統(tǒng)的實現(xiàn)流程

    Java 實戰(zhàn)項目之在線點餐系統(tǒng)的實現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實現(xiàn)在線點餐系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • IDEA中Java出現(xiàn)無效的源發(fā)行版錯誤的解決辦法

    IDEA中Java出現(xiàn)無效的源發(fā)行版錯誤的解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA中Java出現(xiàn)無效的源發(fā)行版錯誤的解決辦法,IDEA中Java出現(xiàn)?效的源發(fā)?版解決辦法出現(xiàn)該問題的原因是項?Project當(dāng)中的jdk與電腦當(dāng)中的jdk版本不?致造成的,需要的朋友可以參考下
    2023-10-10
  • Hibernate核心類和接口的詳細(xì)介紹

    Hibernate核心類和接口的詳細(xì)介紹

    今天小編就為大家分享一篇關(guān)于Hibernate核心類和接口的詳細(xì)介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Mybatis-Plus實體類繼承Model的使用小結(jié)

    Mybatis-Plus實體類繼承Model的使用小結(jié)

    Mybatis-Plus實體類繼承Model的使用是Mybatis-Plus中的一個重要特性,它允許開發(fā)者通過繼承Model類來快速實現(xiàn)一些通用的功能,本文主要介紹了Mybatis-Plus實體類繼承Model的使用小結(jié),感興趣的可以了解一下
    2024-07-07
  • SpringBoot整合Netty服務(wù)端的方法示例

    SpringBoot整合Netty服務(wù)端的方法示例

    本文詳細(xì)介紹了SpringBoot和Netty的整合方法,包括添加依賴、創(chuàng)建Netty服務(wù)端代碼解析類、創(chuàng)建字符解析器等步驟,以及開發(fā)過程中遇到的問題及解決方法,感興趣的可以了解一下
    2024-10-10
  • SpringMVC結(jié)合ajaxfileupload.js實現(xiàn)文件無刷新上傳

    SpringMVC結(jié)合ajaxfileupload.js實現(xiàn)文件無刷新上傳

    這篇文章主要介紹了SpringMVC結(jié)合ajaxfileupload.js實現(xiàn)文件無刷新上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • IDEA實現(xiàn)JDBC的操作步驟

    IDEA實現(xiàn)JDBC的操作步驟

    JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序,本文給大家介紹IDEA實現(xiàn)JDBC的操作步驟,感興趣的朋友一起看看吧
    2022-01-01
  • JAVA如何獲取30天或某段范圍日期

    JAVA如何獲取30天或某段范圍日期

    JAVA獲取30天或某段范圍日期的方法,在項目使用中比較頻繁,通過示例代碼介紹了Java獲取當(dāng)前時間的上一年、下一年、上個月、下個月、前一天,當(dāng)天,本周,上周,本季度,上季度等(時間格式化),感興趣的朋友一起看看吧
    2023-10-10
  • SpringBoot中防止接口重復(fù)提交的有效方法

    SpringBoot中防止接口重復(fù)提交的有效方法

    在Web應(yīng)用開發(fā)過程中,接口重復(fù)提交問題一直是一個需要重點關(guān)注和解決的難題,本文將從SpringBoot應(yīng)用的角度出發(fā),探討在單機(jī)環(huán)境和分布式環(huán)境下如何有效防止接口重復(fù)提交,希望通過本文的介紹,讀者能夠掌握在SpringBoot應(yīng)用中防止接口重復(fù)提交的有效方法
    2024-05-05

最新評論

南开区| 浏阳市| 湟源县| 柳江县| 金华市| 顺平县| 新蔡县| 玉门市| 蒙阴县| 北流市| 左权县| 滁州市| 万盛区| 东光县| 大连市| 胶南市| 黄山市| 青阳县| 敦煌市| 花莲县| 黎城县| 汾西县| 镇宁| 图片| 青海省| 孟村| 城固县| 丰都县| 常宁市| 孟津县| 东港市| 和政县| 赣州市| 明光市| 乐亭县| 旬邑县| 乐昌市| 临江市| 天全县| 娄烦县| 连州市|