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

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

,
    推荐阅读
  • 养花用什么肥料长得快(养花用什么肥料长得快些)

    豆壳的水煮熟经过发酵可以作为有机液肥给花补充养分,能使花长的更快更旺盛,但是注意在使用时要先兑点水稀释一下。这样制作的肥水里面含有非常丰富的碳磷钾元素,很适合当有机液肥用。这样对花的生长非常有利,尤其是观叶的花卉。但是也不能用的太频繁,大概一到两周用一次就行。

  • 芃是什么意思(何谓芃)

    接下来我们就一起去研究一下吧!芃是什么意思芃是一个汉字词语,意思是植物茂盛的样子。字义解释活力,生命力,勇敢和积极进取,健康健壮。兽毛蓬松的样子:“有~者狐,率彼幽草。”植物茂盛的样子。详细字义(形声。——《诗·鄘风·载驰》芃芃秋麦盛,苒苒夏条垂。——唐·沈佺期《夏日梁王席送张岐州》[《广韵》薄红切,平东,并。][《广韵》房戎切,平东,奉。

  • 深度学习中的强化学习(深度强化学习研究的短期悲观与长期乐观)

    不幸的是,它目前还不能真正地奏效。某种程度上,消极的结果实际上比积极的结果更加重要。在试验的57场Atari游戏中,有超过40场的表现超越了人类。而人类通常能够在几分钟之内学会一款Atari游戏。最好的问题就是需要作出很好的研究贡献以得到解决方案的问题,但是满足这种标准是很困难的。类似的情况,在Atari游戏中,使用现成的蒙特卡洛树搜索也能够很容易地得到强于DQN的性能。其中UCT是目前使用的蒙特卡洛树搜索的一个标准版本。

  • angelababy的惊艳台词(让人尴尬到发笑的台词或句子)

    就带女生去逛美特斯邦威?像这样的台词或句子在各个作品中都不少见,最近就有许多网友们在网上一起盘点了自己看过的那些让人尴尬到发笑的台词或句子。想到这些文字从真实的人口中说出,小编立马觉得浑身的汗毛已经竖起。人家三小只现在也才二十岁不到,这些疯狂的粉丝真可怕,期待tfboys自己看到这些作品时的表情。

  • 电信王者卡可靠吗(电信王者卡发布)

    7月10日,“云南电信×王者荣耀联名新品发售活动”在昆明公园1903凯旋门主广场举行,双方跨界联名新品——电信王者卡当日正式登陆发售,凭借专属权益赋能和热门内容搭载,让云南的王者玩家们率先享受到了超值福利与体验。小小白落落大方的台风,给人留下深刻的印象,为电信王者卡发布与签售加持助力。到了电竞表演环节,来自云南的8支王者荣耀战队共40人在会场集结,为慕名而来的游戏玩家上演了一场超高水平的电竞大战。

  • 2022莆田考研网上确认是什么时候 莆田学院2020考研

    2022年全国硕士研究生招生考试莆田报考点网上确认信息的时间:莆田报考点全国硕士研究生招生考试网上确认工作于2021年10月30日-11月4日进行。考生凭网报用户名及密码,于10月30日8:00-11月4日16:00登录系统上传材料。考生要及时关注确认系统反馈的审核结果,阅读“中国高等教育学生信息网”推送的短信。提示“审核不通过”的考生,应及时提交相关材料。

  • 柿饼发霉怎么处理(柿饼发霉能吃吗)

    柿饼发霉能吃吗柿饼发霉了能不能吃要看是不是真的发霉了柿饼上有一层白色的糖霜,看起来就像是发霉了一样,其实并没有发霉,这是柿子中糖析出的正常反应,因此是可以食用的冰山如果出现白色长毛、或者其他颜色的斑块,那就是真的发。

  • 清明的来历和习俗(清明的来历和习俗介绍)

    清明的来历和习俗介绍清明的来历据传始于古代帝王将相“墓祭”之礼,后来民间亦相仿效,于此日祭祖扫墓,历代沿袭而成为中华民族一种固定的风俗本来,寒食节与清明节是两个不同的节日,到了唐朝,将祭拜扫墓的日子定为寒食节“清明节”的。

  • 东营哪些人群应该接种新冠病毒疫苗加强针?

    适种人群:1、根据国家安排,现阶段新冠病毒疫苗加强免疫的目标人群为全程接种国药中生北京公司、北京科兴中维公司、国药中生武汉公司灭活疫苗和天津康希诺公司的腺病毒载体疫苗满6个月的18岁及以上人群。

  • 脚冰凉能泡脚吗(天冷脚麻可能是血管问题别乱泡脚)

    据了解,下肢动脉硬化闭塞是随着年龄增长而出现的血管疾病,70岁—80岁是高发人群,近年也有发病年轻化的趋势,50岁开始患病。专家提醒,泡脚一开始会觉得舒服,其实会造成恶性循环,这是因为热水泡脚时远端血管扩张,血管壁也扩张,造成组织新陈代谢加快,血液供不上,而闭塞本身就会造成养分供应不足,以致加重缺血症状。