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

Java8中用foreach循環(huán)獲取對象的index下標詳解

 更新時間:2021年04月17日 14:20:20   作者:RhapsodyDandelion  
這篇文章主要給大家介紹了關(guān)于Java8中用foreach循環(huán)獲取對象的index下標的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

在Java8中,我們經(jīng)常使用lambada表達式進行foreach循環(huán),但是常常我們在遍歷List的時候想獲取對象的index,但是Java8、9、10、11都沒有相關(guān)的支持,同樣的問題也存在于增強型for循環(huán)中,很多時候不得不含著淚以 for (int i = 0; i < list.size(); i++) 的方式寫代碼

我們的期望

list.foreach((item,index)->{})  //編譯不通過

常見的list獲取index方法

for(int i=0;i<list.size();i++>)

for (int i = 0; i < list.size(); i++) {   
}

indexOf(Obj)

for (Object o : list) {
    list.indexOf(o); //如果是Set還沒有這個方法
}

還有…

int i = 0;
for (String s : list) {
    i++;
}

很顯然上述的方法并不是我們所想要的

Consumer和BiConsumer

我們看個簡單的例子

Consumer<String> consumer = t -> System.out.println(t);
consumer.accept("single");
BiConsumer<String, String> biConsumer = (k, v) -> System.out.println(k+":"+v);
biConsumer.accept("multipart","double params");

輸出結(jié)果:

single
multipart:double params

這里不難發(fā)現(xiàn)我們平時寫的箭頭函數(shù)其實是一個Consumer或者BiConsumer對象

定制Consumer

foreach源碼

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

分析源碼可知,我們的list foreach方法傳入的是Consumer對象,支持一個參數(shù),而我們想要的是item,index兩個參數(shù),很明顯不滿足,這時我們可以自定義一個Consumer,傳參是BiConsumer,這樣就能滿足我們需求了,代碼如下:

import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class LambadaTools {
    /**
     * 利用BiConsumer實現(xiàn)foreach循環(huán)支持index
     *
     * @param biConsumer
     * @param <T>
     * @return
     */
    public static <T> Consumer<T> forEachWithIndex(BiConsumer<T, Integer> biConsumer) {
        /*這里說明一下,我們每次傳入forEach都是一個重新實例化的Consumer對象,在lambada表達式中我們無法對int進行++操作,
        我們模擬AtomicInteger對象,寫個getAndIncrement方法,不能直接使用AtomicInteger哦*/
        class IncrementInt{
            int i = 0;
            public int getAndIncrement(){
                return i++;
            }
        }
        IncrementInt incrementInt = new IncrementInt();
        return t -> biConsumer.accept(t, incrementInt.getAndIncrement());
    }
}

調(diào)用示例:

List<String> list = new ArrayList();
list.add("111");
list.add("222");
list.add("333");
list.forEach(LambadaTools.forEachWithIndex((item, index) -> {
    System.out.println(index +":"+ item);
}));

輸出結(jié)果如下:

0:111
1:222
2:333

PS:這個Set也可以用哦,不過在Set使用中這個index可不是下標

總結(jié)

到此這篇關(guān)于Java8中用foreach循環(huán)獲取對象的index下標的文章就介紹到這了,更多相關(guān)Java8獲取對象index下標內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring?MVC優(yōu)雅處理異常的6種方式

    詳解Spring?MVC優(yōu)雅處理異常的6種方式

    在Spring中提供了多種機制來處理控制器拋出的異常,確保應用程序在面對各種錯誤情況時能夠優(yōu)雅地響應,本文我們來詳細分析Spring?MVC中6種優(yōu)雅處理異常的方式,需要的可以參考下
    2024-12-12
  • java 深拷貝與淺拷貝機制詳解

    java 深拷貝與淺拷貝機制詳解

    這篇文章主要介紹了 java 深拷貝與淺拷貝機制詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 關(guān)于mybatisPlus?yml配置方式

    關(guān)于mybatisPlus?yml配置方式

    這篇文章主要介紹了mybatisPlus?yml配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java編寫簡易rabbitmq生產(chǎn)者與消費者的代碼

    Java編寫簡易rabbitmq生產(chǎn)者與消費者的代碼

    開發(fā)時經(jīng)常與其它系統(tǒng)用rabbitmq對接,當需要自測時,還是自己寫rabbitmq生產(chǎn)者、消費者自測方便些,下面給大家總結(jié)使用java編寫簡易rabbitmq的方法,感興趣的朋友一起看看吧
    2023-11-11
  • SpringBoot發(fā)送各種復雜格式郵件的示例詳解

    SpringBoot發(fā)送各種復雜格式郵件的示例詳解

    本文主要介紹了如何使用JavaMailSender接口和MimeMessageHelper類,在SpringBoot實現(xiàn)發(fā)送帶有附件,嵌入資源,抄送和密送的復雜郵件,需要的可以了解下
    2024-11-11
  • HashSet和TreeSet使用方法的區(qū)別解析

    HashSet和TreeSet使用方法的區(qū)別解析

    這篇文章主要介紹了HashSet和TreeSet使用方法的區(qū)別解析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Spring向頁面?zhèn)髦岛徒邮茼撁鎮(zhèn)鬟^來的參數(shù)詳解

    Spring向頁面?zhèn)髦岛徒邮茼撁鎮(zhèn)鬟^來的參數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Spring向頁面?zhèn)髦岛徒邮茼撁鎮(zhèn)鬟^來的參數(shù)的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Java內(nèi)存模型詳解

    Java內(nèi)存模型詳解

    JMM全稱Java Memory Model, 中文翻譯Java內(nèi)存模型,一種符合內(nèi)存模型規(guī)范的,屏蔽了各種硬件和操作系統(tǒng)的訪問差異的,本詳細介紹了Java內(nèi)存模型,感興趣的同學可以參考一下
    2023-04-04
  • java中double類型運算結(jié)果異常的解決方法

    java中double類型運算結(jié)果異常的解決方法

    下面小編就為大家?guī)硪黄猨ava中double類型運算結(jié)果異常的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 解決springboot啟動報錯bean找不到的問題

    解決springboot啟動報錯bean找不到的問題

    這篇文章主要介紹了解決springboot啟動報錯bean找不到原因,本文給大家分享完美解決方案,通過圖文相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2023-03-03

最新評論

卓资县| 奉新县| 汤阴县| 新昌县| 松潘县| 阿城市| 绥滨县| 永吉县| 东山县| 济宁市| 甘洛县| 札达县| 临潭县| 洛川县| 日喀则市| 察隅县| 中江县| 万宁市| 县级市| 陇南市| 那曲县| 甘孜县| 宝应县| 甘德县| 仁寿县| 滨海县| 沙田区| 安陆市| 大丰市| 大理市| 大足县| 福清市| 改则县| 英山县| 桦川县| 吐鲁番市| 德江县| 孟州市| 海盐县| 贵南县| 樟树市|