肥宅钓鱼网
当前位置: 首页 钓鱼百科

java中foreach怎么获取序号(foreach循环如何获取对象的index下标)

时间:2023-07-17 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

java中foreach怎么获取序号?接下来我们就一起去研究一下吧!

java中foreach怎么获取序号?在Java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历List的时候想获取对象的index,但是Java8、9、10、11都没有相关的支持,同样的问题也存在于增强型for循环中,很多时候不得不含着泪以 for (int i = 0; i < list.size(); i) 的方式写代码,今天小编就来聊一聊关于java中foreach怎么获取序号?接下来我们就一起去研究一下吧!

java中foreach怎么获取序号

在Java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历List的时候想获取对象的index,但是Java8、9、10、11都没有相关的支持,同样的问题也存在于增强型for循环中,很多时候不得不含着泪以 for (int i = 0; i < list.size(); i) 的方式写代码

由于篇幅原因,小编已将Java系列知识都整理出来了,有需要的私信我关键词 “Java”,回复获取免费下载原文件的方式。

我们的期望

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可不是下标

看完这篇文章你学会了吗?

注意一下咯:由于篇幅原因,小编已将JAVA相关的知识都集结整理出来了,有需要的私信我关键词 “Java”,回复获取免费下载原文件的方式。

作者:RhapsodyDandelion链接:https://juejin.cn/post/6951283538687688717来源:掘金

,
    推荐阅读
  • 如何让问答阅读量上万(教你4个技巧)

    如何让问答阅读量上万?找有热度有质量的问题回答,这里给大家提供4个方面:,接下来我们就来聊聊关于如何让问答阅读量上万?以下内容大家不妨参考一二希望能帮到您!切身的案例来阐释,回答时真实感人的自身故事,更能引发共鸣,提炼观点后,用自己的真实故事进行阐释,更容易赢得读者的认同和点赞。

  • 铁板烤虾的做法(铁板烤虾的做法和配料)

    8、平底锅里放适量油,下葱姜煸香,加入青椒。

  • 安徽寿县的方言(安徽淮南寿县方言很有特点)

    寿县古城鸟瞰但是在语言文化上面,官方把安徽省寿县方言定性属于中原官话,但古入声字在今寿县方言的归类并不与中原官话的分派规律一致,而呈现出自己的特点。中部、北部、西部一致性强,属于中原官话。南部、东部部分乡镇有十里不同音现象,属于江淮官话和中原官话的混音,但是从声调方面更接近中原官话和考虑区域完整性,故仍然归为中原官话信蚌片。

  • 蒜香凤尾鱿怎么做(蒜蓉凤尾)

    将改好刀的鱿鱼放入自制蒜蓉辣酱中浸泡30分钟,取出冲洗干净,表面拍一层吉士粉。锅内入宽油烧至六成热,放入鱿鱼,炸5分钟成金黄色捞出。将鱿鱼头切下摆在盘的一边,鱿鱼身竖切断成三大块,在每一块上打斜刀,逆梳子花刀的方向切断,成凤尾状摆盘上桌即可。自制蒜蓉辣酱做法:将蒜、姜和元葱用搅拌机打成泥,加入盐、味精、糖和桂林辣酱,搅拌均匀即成。

  • 超纯水是什么 超纯水是什么意思

    超纯水又称UP水,是指电阻率达到18MΩ*cm(25℃)的水。这种水中除水分子外,不含其它杂质,如细菌、病毒、含氯二噁英等有机物,也没有人体所需的矿物质等微量元素,即是去除氧和氢以外所有原子的水。可用于超纯材料应用蒸馏、去离子化、反渗透技术或其它适当的超临界精细技术的制备过程。

  • 2022年全新广汽本田冠道(剑走偏锋的旗舰SUV)

    国内的中型SUV市场,一直被丰田汉兰达占据霸主地位,直到换代福特锐界的杀入,才终于有位对手能从其手上分一杯羹。眼瞅着这两家都赚得盆满钵满,本田也坐不住了,派出冠道来争得一席之地。作为广汽本田的全新旗舰SUV,正式发布之前,大家都以为本田家会直接拿来它在北美销售的Pilot国产,7座对7座,中型对中型,和汉兰达正好“门当户对”。而本田却拿出一台全新研发并且只有5座版的冠道,在体型上依旧和汉兰达相仿。

  • 1.6排量以下节能车减半征收车船税(节能汽车减半征收车船税)

    免征车船税的使用新能源汽车包括纯电动商用车、插电式混合动力汽车、燃料电池商用车。纯电动乘用车和燃料电池乘用车不属于车船税征税范围,对其不征车船税。免征车船税的使用新能源船舶的标准将另行制定。通知并称,将对节约能源车船,减半征收车船税。新能源汽车是指采用非常规车用燃料作为动力来源,综合车辆的动力控制和驱动方面的先进技术,形成的技术原理先进、具有新技术、新结构的汽车。

  • 什么是滤波电容(滤波电容是什么东西)

    下面更多详细答案一起来看看吧!什么是滤波电容电容是两个彼此靠近又相互绝缘的导体。滤波电容是指安装在整流电路两端用以降低交流脉动波纹系数提升高效平滑直流输出的一种储能器件。由于滤波电路要求储能电容有较大电容量。所以,绝大多数滤波电路使用电解电容。

  • 迷失之牙大乱斗出装(极地大乱斗英勇投弹手出装符文)

    ad飞机ad飞机a人更疼,持续输出能力更强,但在对面手长的时候表现不如ap飞机,且对输出环境的要求高于ap飞机,面对近战偏多的阵容比较好用。符文选择先攻ad和ap飞机都能带先攻,先攻强度和黑暗收割接近,胜率略高一点。黑暗收割这套符文也是ad和ap通用,终极猎人可以换成宝藏猎手,致命一击可以换成砍倒,进攻小符文可以换成攻速。

  • 琥珀的形成经历了哪四个阶段(琥珀的形成经历了哪四个阶段的变化)

    2、琥珀的形成一般有四个阶段,第一阶段是树脂从柏松树上分泌出来,第二阶段是树脂被深埋,第三阶段发生了石化作用,树脂的成分、结构和特征都发生了明显的变化;第四阶段是石化树脂被冲刷、搬运、沉积和发生成岩作用从而形成了琥珀。