怎么使用Java中的foreach语句来获取对象index下标
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了怎么使用Java中的foreach语句来获取对象index下标,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在J
千家信息网最后更新 2025年02月01日怎么使用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安全错误
数据库的锁怎样保障安全
服务器 推流
给数据库表格删除一列数据库
数据库多语句查询语句
freenas修改服务器名称
网络安全数据丢失
怎么设置连接的网络安全
5g速度那么快服务器跟得上吗
oracle数据库组成
网络安全与文明主题队会
深圳市格瓦斯网络技术有限公司
网络安全马克笔画的图
网络安全渗透工程师培训通知
软件开发自我总结及自评
数据库技术的基础知识ppt
异空间网络安全可靠吗
影视资源用什么服务器
怎么管理服务器上的用户
网络技术课本百度云
我的世界有三十二k的服务器推荐
携手网络安全给孩子
做软件开发是不是英文要好
连接默认无线网络安全吗
网络技术负责人工作总结范文
香肠派对服务器断开是什么原因
什么是网络安全三级技术监督
软件开发有关的证书
软件开发苹果13还是15寸
属于非关系型数据库优势
小学校园网络安全等级评定自查
数据库映射有用吗