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

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

,
    推荐阅读
  • 东施效颦的典故出自哪里(东施效颦的典故出自于哪里)

    “东施效颦”讲述了古代有位叫东施的丑女模仿美女西施皱眉头的故事。这个成语含贬义,常用于讽刺人盲目模仿他人,最后却画虎不成反类犬,招人耻笑。后人将这个丑女称作东施。有时也作自谦之词,表示自己根底差,学别人的长处没有学到家。可作谓语、宾语、定语,含贬义。

  • 嫌疑人x的献身感悟(一场为至纯爱情献身的诡计)

    电影风格都是从导演偏好和故事主题发展出来,《嫌疑人X的献身》也不例外。唐川是一个非常聪明、自视甚高的人所以变得很孤僻,石泓本来就是一个性格很孤僻的人,陈婧是一个很无助的人,旁边没有人支撑她。林心如饰演的陈婧在电影中是一个非常柔弱的存在,她所出现的画面大多都是柔光。陈婧女儿宽大的校服,更是贯穿了每一代学生的中学记忆。

  • 什么方法可以快速让毛孔缩小(怎样做才能有效缩小毛孔)

    想要缩小毛孔,首先要学会正确洗脸。毛孔粗大,绝多数原因是由于毛孔内脏东西太多,因此要做做搓脸操,把毛孔内的垃圾全部清理掉,因此洗脸的正确性非常重要。如果没有彻底卸妆,残余的护肤品会在皮肤底层堆积,这样就会出现毛孔粗大等皮肤问题。

  • 做人要有阿q精神(人有时需要一些)

    “阿Q精神”虽然有其落后、愚昧、消极一面的东西;但是,作为一种思维方式,它也有其积极、健康的一面。“阿Q精神”可以让人们心态平和、社会稳定。这就需要“阿Q精神”来制服自己的心魔,就要学会“难得糊涂”。当我们因期望过高而造成现实与期望的巨大落差时,尤其需要“阿Q精神”来实行自我调节和安慰。“阿Q精神”可以让人们克制贪欲、知足常乐。“阿Q精神”最突出的一个特点就是自我满足。

  • popeyes是全美第一炸鸡吗(Popeyes炸鸡突然一夜关7家店)

    种种迹象显示,Popeyes的关店行动十分仓促。其品牌方母公司RBI在2022年2月中旬发布的财报中披露称,2022年初,RBI与汉堡王和Popeyes的中国主特许经营协议方在进行谈判,以解决2021年出现的“商业纠纷”。譬如在7月21日,蛋糕品牌LADYM中国内地运营方上海牧薪餐饮管理有限公司发布了关于中国内地门店终止经营公告。而随后LADYM品牌方回应称,将在中国内地将门店转为品牌方直营。

  • 闺蜜过生日适合送什么花(生日送花搭配介绍)

    以下内容希望对你有帮助!闺蜜过生日适合送什么花向日葵之歌花材:向日葵6枝搭配适量黄色勿忘我、黄英。美丽心情花材:粉色紫罗兰5枝,粉佳人11枝,苏醒3枝,搭配适量山苏叶、叶上花。

  • 王者荣耀简单情侣名字(适合王者荣耀的情侣名)

    王者荣耀简单情侣名字?装逼过度‖单纯失误魅眼妖女‖冷眼独侠,今天小编就来说说关于王者荣耀简单情侣名字?下面更多详细答案一起来看看吧!‖狂的像妓i睡不饱的猪‖吃不饱的猪旋风少女‖风英少年聪明先生‖笨蛋小姐身披王袍‖独掌帝国温柔酷刑‖枪声安静凶猛哥‖柔软妹别离开‖我还在浪娘‖色爹抱紧我‖搂住我花济世‖劫渡人乾鹤尧‖蜀瑜菱

  • 王者荣耀里面宫本武藏地狱之眼多少点券(王者荣耀宫本武藏地狱之眼多少钱详解)

    下面内容希望能帮助到你,我们来一起看看吧!王者荣耀里面宫本武藏地狱之眼多少点券宫本武藏新皮肤地狱之眼于2016年6月9日端午节上架,端午节期间特价1350点券,原价需要1688点券。《王者荣耀》是由腾讯游戏天美工作室群开发并运行的一款运营在Android、IOS、NS平台上的MOBA类手机游戏,于2015年11月26日在Android、IOS平台上正式公测,游戏前期使用名称有《英雄战迹》、《王者联盟》。《ArenaOfValor》,即《王者荣耀》的欧美版本于2018年在任天堂Switch平台发售。

  • 吉林省自然博物馆预约程序有变(吉林省自然博物馆预约程序有变)

    吉林省自然博物馆原免费预约使用的吉林省自然博物馆文旅绿码预约小程序现改为支付宝预约程序。具体操作流程如下打开手机支付宝第一步:搜索“吉林省自然博物馆”,并进入官方小程序;第二步:点击主页“预约”,并填写预约日期、场次、游客数量,及游客信息;第三步:预约成功,凭码入馆。

  • 运河第一城游玩(千年古镇行从临平到张家湾)

    岸上,四只毛猴两两一组抬着木材,送往码头。因所需资金甚巨,陈守清便搭乘便船至京城,以铁链束缚自身向来往官民募捐。为表彰浙省,皇帝大笔一挥,蠲免浙省地丁钱粮三十万两,并将“圣谕”刻石,晓谕官民。此前公布的《北京城市副中心张家湾古镇地区规划综合实施方案》提出,通过全维度历史沿革梳理,挖潜张家湾古镇四大历史文化价值。