亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java8中用foreach循環獲取對象的index下標詳解

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

在Java8中,我們經常使用lambada表達式進行foreach循環,但是常常我們在遍歷List的時候想獲取對象的index,但是Java8、9、10、11都沒有相關的支持,同樣的問題也存在于增強型for循環中,很多時候不得不含著淚以 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');

輸出結果:

singlemultipart:double params

這里不難發現我們平時寫的箭頭函數其實是一個Consumer或者BiConsumer對象

定制Consumer

foreach源碼

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

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

import java.util.ArrayList;import java.util.List;import java.util.function.BiConsumer;import java.util.function.Consumer;public class LambadaTools { /** * 利用BiConsumer實現foreach循環支持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()); }}

調用示例:

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);}));

輸出結果如下:

0:1111:2222:333

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

總結

到此這篇關于Java8中用foreach循環獲取對象的index下標的文章就介紹到這了,更多相關Java8獲取對象index下標內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 日本护士做xxxxxx视频 | 亚洲综合日韩中文字幕v在线 | 中文永久免费看电视网站入口 | 国产精品亚洲va在线观看 | 亚洲午夜精品一区二区蜜桃 | 国产美女a做受大片在线观看 | 日本国产在线视频 | 亚洲精品第五页中文字幕 | 成人夜间视频 | 国产麻豆精品在线观看 | 国产污视频在线播放 | 日本片网址 | chinese国产在线视频 | 国产欧美综合一区二区 | 欧美黑人与白人做爰 | 国内精品一区二区三区东京 | 香蕉视频在线观看www | 久久99九九精品免费 | 尤物视频在线观看入口 | 精品欧美 | 欧美激情在线精品三区 | 麻豆国产一区二区在线观看 | 日韩一级生活片 | 自拍黄色片 | 国产毛片一区 | 爱爱小说视频永久免费网站 | 精品久久久久国产免费 | 亚洲国产第一区二区香蕉日日 | 免费a一毛片 | 国产高清在线91福利 | 欧美日韩在线高清 | 高清性色生活片久久久 | 免看一级a一片成人123 | 香蕉视频三级 | 国产一级做a爰片在线看 | 久久久受www免费人成 | 高清免费国产在线观看 | 免费永久国产在线视频 | 国产精品一二区 | 国产成人精品一区二三区在线观看 | 伊人久久大香线蕉精品哪里 |