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

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来源:掘金

,
    推荐阅读
  • 我曾经走过多遥远的路是什么歌(我曾经走过多遥远的路是什么歌抖音谁唱的)

    1、我曾经走过多遥远的路是歌曲《寂寞烟火》中的歌词。

  • 牛排做的时候需要焯水吗(牛排到底要不要水洗)

    大家好,我是雷小厨,每天坚持自己下厨,用最简单的食材,烹饪出最合胃口的家常美味,欢迎关注!牛排到底要不要水洗,很多人都搞错了,好食材都被浪费了!学会了,在家也能煎出鲜嫩多汁的牛排。最后把秋葵放入盘中装饰一下即可,好看又好吃,鲜嫩多汁的牛排就做好啦,我先吃了,美味。

  • 硝酸银溶液如何标定(硝酸银沉淀滴定法测盐分)

    为达到终点恰好与等当点一致的目的,必须控制溶液中CrO4-的浓度。每50~100ml滴定溶液中加入5%(W/V)K2CrO4溶液1ml就可以了。如果溶液的酸性较强,可用稀NaOH溶液调至中性,或改用硫酸铁铵指示剂法。加入1mL10%酪酸钾溶液,用硝酸银滴定至出现砖红色沉淀,记录消耗硝酸银的体积,做三次平行实验。六、说明同一分析者,同一试样,同时或者相继两次测定结果,相对误差不大于2%。

  • 王者荣耀金标是什么(王者荣耀金标的意思)

    跟着小编一起来看一看吧!王者荣耀金标是什么王者荣耀手游中,“金标”通常指的是高级荣耀的省级标志,玩家英雄的荣耀战力达到3000分以上,并且进入荣耀战区排行榜的前100名,就可以获得金色的省级标志。王者荣耀中的玩法以竞技对战为主,玩家之间进行1VS3VS5VS5等多种方式的PVP对战,还可以参加游戏的冒险模式,进行PVE的闯关模式,在满足条件后可以参加游戏的排位赛等,是属于推塔类型的游戏。

  • 涂眼线技巧和步骤(新手画眼线的正确方法)

    涂眼线技巧和步骤?沿着睫毛根出点状描画,很自然流畅的就能勾勒出一条眼线,双色填补不同位置,出现的效果就大不相同哦。常用的眼线画法之一,就是往上勾勒出线条,然后眼线尾出上扬,勾勒好轮廓之后呢,在将轮廓填饱满即可。一样的预先勾勒出线条,眼尾处上扬,然后在填充饱满,效果很棒,靠近睫毛根部需要填充饱满即可。画眼线的时眼角眼尾提拉,下眼处需要轻轻勾勒即可。眼线笔勾勒线条自然,眼线笔秒回,让眼影更有神韵。

  • 春节快乐手抄报 快乐过春节手抄报图片

    2、顶上画满横线,右边画一个边框,上面画四个灯笼,写上。

  • 油焖大虾最简单的做法(怎样做最简单的油焖大虾)

    以下内容希望对你有帮助!油焖大虾最简单的做法大虾适量,辅料蒜末适量,姜末适量,葱花适量,番茄酱1勺,料酒1勺。1准备适量大虾剪去虾腿,挑出虾线洗净备用。锅中热油放入蒜末,姜末炒香,放一勺番茄酱炒匀。

  • 宝宝学步鞋怎么选(宝宝学步车有必要买吗?)

    学步车不是一定要买的,因为宝宝的年纪小,骨胳发育尚不完善。如果宝宝发生了摔倒现象是比较严重的。但是如果把宝宝经常放在学步车里,会限制宝宝的行动。因为大部分宝宝在学习走路的时候应该在八个月以后。避免产生依赖心理。学步车不用必须买,因为学步车是有不安全因素存在的。比如学步车的车腿撞到比较坚硬的物体时,就会发生危险。所以学步车可以给宝宝用,但是需要给宝宝使用正常的学步车。

  • 控油除螨的方法(去除脸上螨虫的小妙招)

    饮食方面要清淡多吃水果蔬菜。禁油腻辛辣刺激性食物。清洁方面要注意尽量使用具有控油除螨作用的洗面奶。如果由于螨虫感染而引起炎症,就需要使用抗生素类外用药进行治疗。比如可以使用甲硝唑凝胶外涂。此外,还应彻底清洁居住环境,彻底清洁被褥并定时清洗晾晒,避免螨虫的再次复发。如果是油性皮肤,平时要清淡饮食,规律作息,控制面部出油,对恢复也有好处。

  • 怎么搭建属于自己服务器(四个步骤教你怎么搭建服务器)

    怎么搭建属于自己服务器第一:环节安装包先下载一个网络服务器环境的安装压缩包,这一文档能够在cms,也就是织梦cms系统软件中下载,文件目录称为php服务器整合套件。安装结束之后会有个提醒:成功完成安装!此刻提示框的最下面也出現了相对的更改,大家可以直接挑选发布程序流程就可以了,最好挑选手动式安装。此刻记事本文件便会变为一个网页源代码,就可以用文本文档专用工具去编写它,随意写点內容随后储存就可以。