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

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

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

前言

在Java8中,我們經(jīng)常使用lambada表達(dá)式進(jìn)行foreach循環(huán),但是常常我們?cè)诒闅vList的時(shí)候想獲取對(duì)象的index,但是Java8、9、10、11都沒有相關(guān)的支持,同樣的問題也存在于增強(qiáng)型for循環(huán)中,很多時(shí)候不得不含著淚以 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還沒有這個(gè)方法
}

還有…

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

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

Consumer和BiConsumer

我們看個(gè)簡(jiǎn)單的例子

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í)寫的箭頭函數(shù)其實(shí)是一個(gè)Consumer或者BiConsumer對(duì)象

定制Consumer

foreach源碼

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

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

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

public class LambadaTools {
    /**
     * 利用BiConsumer實(shí)現(xiàn)foreach循環(huán)支持index
     *
     * @param biConsumer
     * @param <T>
     * @return
     */
    public static <T> Consumer<T> forEachWithIndex(BiConsumer<T, Integer> biConsumer) {
        /*這里說明一下,我們每次傳入forEach都是一個(gè)重新實(shí)例化的Consumer對(duì)象,在lambada表達(dá)式中我們無法對(duì)int進(jìn)行++操作,
        我們模擬AtomicInteger對(duì)象,寫個(gè)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:這個(gè)Set也可以用哦,不過在Set使用中這個(gè)index可不是下標(biāo)

總結(jié)

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

相關(guān)文章

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

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

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

    java 深拷貝與淺拷貝機(jī)制詳解

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

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

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

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

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

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

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

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

    這篇文章主要介紹了HashSet和TreeSet使用方法的區(qū)別解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    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)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Java內(nèi)存模型詳解

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

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

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

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

    解決springboot啟動(dòng)報(bào)錯(cuò)bean找不到的問題

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

最新評(píng)論

彰化县| 肥东县| 二连浩特市| 平舆县| 沙湾县| 怀集县| 沧州市| 清水县| 陆良县| 石柱| 武陟县| 佛坪县| 文登市| 东阿县| 杭锦旗| 讷河市| 克什克腾旗| 潼南县| 宁河县| 尖扎县| 鹿泉市| 家居| 宜兰市| 英吉沙县| 汉沽区| 于田县| 靖西县| 寿阳县| 保康县| 南涧| 柘荣县| 固镇县| 阆中市| 马边| 额尔古纳市| 东港市| 老河口市| 温泉县| 马尔康县| 涿鹿县| 香河县|