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

java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問題

 更新時間:2021年07月28日 09:19:42   作者:熬夜是小狗  
這篇文章主要介紹了java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

java lambda(函數(shù)式編程)一行解決foreach循環(huán)

首先給大家推薦《精通lambda表達式:java多核編程》

這本書詳細介紹了lambda表達式從入門到理解、應(yīng)用

下面介紹用以前的循環(huán)方式進行對比,來更加清晰地java函數(shù)式編程中foreach的用法

一、以前我們使用的for循環(huán)

/**
     * for循環(huán)
     */
    @Test
    public void forTest() {
        // 實例化一個List
        List<Point> points = Arrays.asList(new Point(1, 2), new Point(2, 3));
        System.out.println("循環(huán)操作前:" + points);
        // for循環(huán)
        for (int i = 0; i < points.size(); i++) {
            points.get(i).translate(1, 1);
        }
        System.out.println("循環(huán)操作后:" + points);
    }

二、后來使用foreach循環(huán)(感覺爽多了)

/**
     * foreach循環(huán)
     */
    @Test
    public void forEachTest() {
        List<Point> points = Arrays.asList(new Point(1, 2), new Point(2, 3));
        System.out.println("循環(huán)操作前:" + points);
        // foreach 循環(huán)
        for (Point p : points) {
            p.translate(1, 1);
        }
        System.out.println("循環(huán)操作后:" + points);
    }

三、而大家可能很少了解ArrayList中的forEach方法

下面便是一個實例

/**
     * 調(diào)用ArrayList中foreach方法循環(huán)
     */
    @Test
    public void forEachMethodTest() {
        List<Point> points = Arrays.asList(new Point(1, 2), new Point(2, 3));
        System.out.println("循環(huán)操作前:" + points);
        /**
         * 此foreach為ArrayList中的方法
         * 接收的參數(shù)為Consumer接口
         */
        points.forEach(new Consumer<Point>() {
            public void accept(Point t) {
                t.translate(1, 1);
            }
        });
        System.out.println("循環(huán)操作后:" + points);
    }

ArrayList中的forEach方法源碼實現(xiàn)

/**
     * ArrayList中的foreach方法
     * this為當前集合對象
     * Consumer接口里面的accept方法是對集合中對象所做的操作
     * 底層依然是foreach循環(huán)實現(xiàn)的
     */
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

四、最后,逼格最高,寫法最簡潔,用起來最爽的函數(shù)式寫法

/**
     * lambdaForeach循環(huán)
     */
    @Test
    public void lambdaForEachTest() {
        List<Point> points = Arrays.asList(new Point(1, 2), new Point(2, 3));
        System.out.println("循環(huán)操作前:" + points);
        /**
         * 僅此一行就夠了
         * p -> p.translate(1, 1)
         * points集合的泛型為Point,里面存儲的是Point對象
         * p即Point對象,箭頭后面的即對此對象所做的操作,當然這個p可以隨便命名
         * 比如Long類型的number: num -> sb.append(num + ",");
         * 場景是將一個id集合,使用StringBuilder拼接成逗號分隔的字符串
         */
        points.forEach(p -> p.translate(1, 1));
        System.out.println("循環(huán)操作后:" + points);
    }

四種方式的執(zhí)行結(jié)果:

循環(huán)操作前:[java.awt.Point[x=1,y=2], java.awt.Point[x=2,y=3]]

循環(huán)操作后:[java.awt.Point[x=2,y=3], java.awt.Point[x=3,y=4]]

java Lambda 與forEach

lambda表達式

λ表達式本質(zhì)上是一個匿名方法。

    public int add(int x, int y) {
        return x + y;
    }

轉(zhuǎn)成λ表達式后是這個樣子:

    (x, y) -> x + y; //返回兩數(shù)之和

1、普通方式遍歷 Map

    Map<String, Integer> items = new HashMap<>();
    items.put("A", 10);
    items.put("B", 20);
    items.put("C", 30);
    items.put("D", 40);
    items.put("E", 50);
    items.put("F", 60);
    for (Map.Entry<String, Integer> entry : items.entrySet()) {
        System.out.println("Item : " + entry.getKey() + " Count : " + entry.getValue());
    }

2、使用 forEach + lambda 表達式循環(huán) Map

    Map<String, Integer> items = new HashMap<>();
    items.put("A", 10);
    items.put("B", 20);
    items.put("C", 30);
    items.put("D", 40);
    items.put("E", 50);
    items.put("F", 60);    
    items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));
    items.forEach((k,v)->{
        System.out.println("Item : " + k + " Count : " + v);
        if("E".equals(k)){
            System.out.println("Hello E");
        }
    });

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Hibernate緩存機制實例代碼解析

    Hibernate緩存機制實例代碼解析

    這篇文章主要介紹了Hibernate緩存機制實例代碼解析,介紹了查詢緩存,一級二級緩存等內(nèi)容,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 小白必看toString(),String.valueOf,(String)強轉(zhuǎn)

    小白必看toString(),String.valueOf,(String)強轉(zhuǎn)

    在Java中,往往需要把一個類型的變量轉(zhuǎn)換成String 類型,本文主要介紹了toString(),String.valueOf,(String)強轉(zhuǎn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • SQL注入攻擊及其在SpringBoot中使用MyBatisPlus的防范策略的方法

    SQL注入攻擊及其在SpringBoot中使用MyBatisPlus的防范策略的方法

    本文介紹了如何使用SpringBoot整合JavaDeeplearning4j構(gòu)建一個文本摘要生成系統(tǒng),該系統(tǒng)能夠自動從長篇文本中提取關(guān)鍵信息,生成簡潔的摘要,幫助用戶快速了解文本的主要內(nèi)容,系統(tǒng)使用LSTM神經(jīng)網(wǎng)絡(luò)模型進行訓(xùn)練,并通過SpringBoot創(chuàng)建RESTful?API進行調(diào)用
    2024-11-11
  • java基本教程之join方法詳解 java多線程教程

    java基本教程之join方法詳解 java多線程教程

    本文對java Thread中join()方法進行介紹,join()的作用是讓“主線程”等待“子線程”結(jié)束之后才能繼續(xù)運行,大家參考使用吧
    2014-01-01
  • 淺談java中String與StringBuffer的不同

    淺談java中String與StringBuffer的不同

    String在棧中,StringBuffer在堆中!所以String是不可變的,數(shù)據(jù)是共享的。StringBuffer都是獨占的,是可變的(因為每次都是創(chuàng)建新的對象?。?/div> 2015-11-11
  • Spring Security實現(xiàn)多次登錄失敗后賬戶鎖定功能

    Spring Security實現(xiàn)多次登錄失敗后賬戶鎖定功能

    當用戶多次登錄失敗的時候,我們應(yīng)該將賬戶鎖定,等待一定的時間之后才能再次進行登錄操作。今天小編給大家分享Spring Security實現(xiàn)多次登錄失敗后賬戶鎖定功能,感興趣的朋友一起看看吧
    2019-11-11
  • Spring中的ThreadPoolTaskExecutor線程池使用詳解

    Spring中的ThreadPoolTaskExecutor線程池使用詳解

    這篇文章主要介紹了Spring中的ThreadPoolTaskExecutor線程池使用詳解,ThreadPoolTaskExecutor 是 Spring框架提供的一個線程池實現(xiàn),用于管理和執(zhí)行多線程任務(wù),它是TaskExecutor接口的實現(xiàn),提供了在 Spring 應(yīng)用程序中創(chuàng)建和配置線程池的便捷方式,需要的朋友可以參考下
    2024-01-01
  • springboot數(shù)據(jù)訪問和數(shù)據(jù)視圖的使用方式詳解

    springboot數(shù)據(jù)訪問和數(shù)據(jù)視圖的使用方式詳解

    這篇文章主要為大家介紹了springboot數(shù)據(jù)訪問和數(shù)據(jù)視圖的使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Java多線程局域網(wǎng)聊天室的實現(xiàn)

    Java多線程局域網(wǎng)聊天室的實現(xiàn)

    在學(xué)習了一個學(xué)期的java以后,搞了一個多線程的聊天室,熟悉了一下服務(wù)器和客戶機的操作。感興趣的小伙伴們可以參考一下
    2021-06-06
  • JDBC基礎(chǔ)教程

    JDBC基礎(chǔ)教程

    這篇文章主要介紹了JDBC基礎(chǔ)知識與操作技巧,講述原理與基本技巧的基礎(chǔ)上分析了安全問題與操作注意事項,非常具有實用價值,需要的朋友可以參考下
    2014-12-12

最新評論

仪征市| 三门县| 山阴县| 普洱| 措美县| 南陵县| 平塘县| 阿拉善右旗| 治多县| 即墨市| 高阳县| 贡山| 华坪县| 扎鲁特旗| 汝阳县| 年辖:市辖区| 诸暨市| 平度市| 无锡市| 东山县| 怀化市| 香格里拉县| 年辖:市辖区| 东城区| 清水河县| 桂阳县| 阳江市| 凯里市| 云浮市| 奉节县| 中方县| 连南| 哈巴河县| 华蓥市| 当阳市| 肥东县| 崇左市| 博兴县| 蕲春县| 噶尔县| 沂南县|