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

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

,
    推荐阅读
  • 电饭煲煲仔饭的做法(电饭煲煲仔饭怎样做法)

    电饭煲煲仔饭怎样做法首先将大米淘洗两遍后再浸泡约一个小时其次将浸泡好的大米加入内胆,添加泡香菇的水到平时煮饭水的高度煮到粘稠时,加入腊肠和香菇然后将油菜焯水,将小米椒切碎最后在快起锅时,加入鸡蛋和调好的料汁。

  • 渐变慕斯滴落蛋糕怎么做(渐变慕斯滴落蛋糕做法)

    渐变慕斯滴落蛋糕怎么做?全麦饼干碎和融化的黄油混合,搅拌均匀。蛋黄打散,加入玉米淀粉,搅拌均匀。加入牛奶、香草精和白糖,搅拌均匀,小火,煮沸。倒入锅内,小火,熬至浓稠。依次倒入模具中,放入冰箱中,冷冻15分钟。取出,脱模,淋上奶油。放上覆盆子、蓝莓和树莓。

  • 月季用柳枝生根方法(处理的技巧有什么)

    月季用柳枝生根方法扦插选择用嫩枝,老枝条生根比较慢,叶子留的越多越好,把枝条切下来之后,所有的叶子都先留下来,叶子能够更好的进行光合作用,所以留的叶子越多越好。切枝条的时候最好把新抽出来的枝条都切下来,这样更容易萌发新根,也是为了让叶子进行光合作用产生的营养快速输送到叶子根部。同时自来水也不用进行过滤,这个不影响枝条的正常生根。

  • 平安保险集团发展历程(平安集团首席保险业务执行官李源祥)

    李源祥表示,由于中国平安的万能险主要以主险的形式出现,并不在监管整治之列。2017年上半年,中国平安实现归属于母公司股东净利润434.27亿元,同比增长6.5%。目前利率上行导致750日移动平均国债收益率曲线上移,保险机构将根据折现率减少准备金计提,从而增加利润。李源祥透露,平安寿险今年的一号工程就是考核业务员的收入。目前,平安代理人15%的收入来自综合金融和交叉销售。

  • 女生领子蝴蝶结系法(衣领蝴蝶结的系法)

    衣领蝴蝶结的系法首先将带子理平整,十字交叉,打一个活结,不要拉的太紧。图片来自网络,如有侵权请告知什么领口显脸小V领在视觉上会拉长脖颈的线条,显得脸比较小。尽量选择大领口的衣服,小领口的堆积感会显得不清爽,从而显得脸大,大领口的圆领和方领都会很好的修饰脸型。

  • 养鸡新方法30条(仙鹤草在养鸡中的作用)

    仙鹤草营养价值丰富,尤其胡萝卜素,维生素C,蛋白质含量高,并且其嫩茎叶也可以供食用。而仙鹤草的地下的根茎芽,其有效成分是鹤草酚,可以作为驱体内寄生虫,尤其是绦虫的特效药。具体使用,还是将适量仙鹤草煮水煎服,给鸡群服用,连续用四天。④仙鹤草清热退烧仙鹤草也是一个安全有效的退烧药,临床中如遇见鸡群感冒引起的发烧,是可以用仙鹤草增强退烧作用的。

  • 合肥到木里大寺自驾多长时间(从合肥市自驾塞力斯到蚌埠市)

    从合肥市自驾塞力斯到蚌埠市提车一个月,小赛正式上牌:皖A.F19819。今天决定上高速试驾,从合肥市到蚌埠市。在高速上,我打开道路巡航功能,让小赛自己在高速上行驶。在蚌埠市打卡市政府、安徽财经大学、龙湖公园风景区、龙湖美食广场、张公山公园等。我曾经于1975年到蚌埠市参加“全省粮仓机械化工作会议”,开会、讨论、吃饭都是在一个大礼堂里面。在后来的几十年里多次到过蚌埠市,都是直接接送到目的地。

  • 关于咏雪佳句的古诗词(关于写雪的古诗词名句)

    ——关汉卿《大德歌·冬景》3、山头堆白雪,风里卷黄沙。——佚名《出车》7、龟言此地之寒,鹤讶今年之雪。——李华《吊古战场文》24、乃幽武置大窖中,绝不饮食。雪拥蓝关马不前。——赵嘏《喜张沨及第》43、叩枻长歌,嫦娥欲下,万里挥冰雪。——陆游《除夜雪》48、散关三尺雪,回梦旧鸳机。——张孝祥《水调歌头·金山观月》51、欲渡黄河冰塞川,将登太行雪满山。——李白《行路难·其一》52、路出寒云外,人归暮雪时。

  • nba:凯尔特人主场96-102不敌公牛(凯尔特人欲4-0淘汰步行者率先晋级)

    步行者队得分王博扬-博格达诺维奇在季后赛的表现有些下滑,常规赛场均可以得到18分,三分命中率高达42.5%的他,在季后赛中的场均得分下滑到了16.7分,三分球命中率更是只有31.6%。

  • 立秋贴秋膘是什么意思(立秋贴秋膘含义)

    接下来我们就一起去了解一下吧!立秋贴秋膘是什么意思立秋,是二十四节气中的第13个节气,每年8月8或9日立秋。这一天民间素有“贴秋膘”一说。民间流行在立秋这天以悬秤称人,将体重与立夏时对比来检验肥瘦,体重减轻叫“苦夏”。那时人们对健康的评判,往往只以胖瘦做标准。瘦了当然需要“补”,补的办法就是“贴秋膘”,吃味厚的美食佳肴,当然首选吃肉,“以肉贴膘”。