av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:79日期:2022-08-14 11:28:38
前言

在Java8中,我們經(jīng)常使用lambada表達(dá)式進(jìn)行foreach循環(huán),但是常常我們在遍歷List的時(shí)候想獲取對象的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è)簡單的例子

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é)果:

singlemultipart:double params

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

定制Consumer

foreach源碼

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

分析源碼可知,我們的list foreach方法傳入的是Consumer對象,支持一個(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對象,在lambada表達(dá)式中我們無法對int進(jìn)行++操作,我們模擬AtomicInteger對象,寫個(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:1111:2222:333

PS:這個(gè)Set也可以用哦,不過在Set使用中這個(gè)index可不是下標(biāo)

總結(jié)

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久精品无码一区二区三区 | 欧美久久精品一级黑人c片 91免费在线视频 | 一区二区三区中文字幕 | 国产天天操 | 久久精品成人一区 | 欧美视频在线看 | 欧美日韩在线观看视频 | 激情国产 | 精品久久久久久久久久久院品网 | 国产精品美女在线观看 | 激情综合五月 | 伊人中文字幕 | 密室大逃脱第六季大神版在线观看 | 亚洲美女av网站 | 日本欧美在线视频 | 亚洲一区二区三区在线观看免费 | 一区二区三区日韩 | 中文字幕影院 | 黑人巨大精品欧美一区二区免费 | 国产大片黄色 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 成人小视频在线观看 | 人人干人人草 | 欧美在线一区视频 | av黄色免费在线观看 | 精品国产乱码久久久久久蜜柚 | 国产精品久久欧美久久一区 | 亚洲欧美在线视频 | 日韩一区欧美一区 | 欧美在线一区二区三区 | 亚洲精品免费观看 | 日韩国产在线观看 | 黄色大片在线视频 | 色又黄又爽网站www久久 | 欧美久久久久久久久 | 欧美日韩综合 | 久久一热| a国产视频 | 日韩欧美三级 | 精品久久香蕉国产线看观看亚洲 | 99中文字幕 |