怎么使用Java中的foreach语句来获取对象index下标
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了怎么使用Java中的foreach语句来获取对象index下标,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在J
千家信息网最后更新 2026年11月03日怎么使用Java中的foreach语句来获取对象index下标我们的期望
Consumer和BiConsumer
定制Consumer
这篇文章主要介绍了怎么使用Java中的foreach语句来获取对象index下标,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
前言
在Java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历List的时候想获取对象的index,但是Java8、9、10、11都没有相关的支持,同样的问题也存在于增强型for循环中,很多时候不得不含着泪以 for (int i = 0; i < list.size(); i++) 的方式写代码
我们的期望
list.foreach((item,index)->{}) //编译不通过常见的list获取index方法
for(int i=0;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 consumer = t -> System.out.println(t);consumer.accept("single");BiConsumer biConsumer = (k, v) -> System.out.println(k+":"+v);biConsumer.accept("multipart","double params"); 输出结果:
single
multipart: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 * @return */ public static Consumer forEachWithIndex(BiConsumer 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 list = new ArrayList();list.add("111");list.add("222");list.add("333");list.forEach(LambadaTools.forEachWithIndex((item, index) -> { System.out.println(index +":"+ item);})); 输出结果如下:
0:111
1:222
2:333
PS:这个Set也可以用哦,不过在Set使用中这个index可不是下标
感谢你能够认真阅读完这篇文章,希望小编分享的"怎么使用Java中的foreach语句来获取对象index下标"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
对象
方法
篇文章
支持
下标
循环
语句
代码
参数
时候
源码
结果
表达式
输出
明显
可不
可不是
两个
价值
例子
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华服互联网科技靠谱吗
南京欣网互联网络科技有限公司
华服互联网科技怎么样
科技赋能下的互联网金融
互联网品科技
智慧科技互联网
无线互联网科技
掌上梦互联网科技
南平创想时代互联网科技有限公司
昭通互联网科技选哪家
新兴科技互联网创新大赛颁奖典礼
健康食品互联网创新科技园项目
山东有哪些互联网科技公司
图游互联网科技
扫呗互联网科技有限公司
世界互联网科技成果奖
江苏互联网智能科技产品出厂价
山东蛋芒互联网科技有限公司
上海互联网科技园景观
小牛互联网科技有限公司地址
新华互联网科技
互联网 科技
互联网 视角下的科技创新
互联网科技有限公司 翻译
哈尔滨新华互联网科技
互联网风格科技公司名称
广州智享互联网科技
互联网对科技影响
北京品多多互联网科技有限公司
现代科技的标志之一的互联网