广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java8中用foreach循环获取对象的index下标详解
  • 554
分享到

Java8中用foreach循环获取对象的index下标详解

2024-04-02 19:04:59 554人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言 在Java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历List的时候想获取对象的index,但是Java8、9、10、11都没有相关的支持,

前言

在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<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");

输出结果:

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 {
    
    public static <T> Consumer<T> forEachWithIndex(BiConsumer<T, Integer> biConsumer) {
        
        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:111
1:222
2:333

PS:这个Set也可以用哦,不过在Set使用中这个index可不是下标

总结

到此这篇关于Java8中用foreach循环获取对象的index下标的文章就介绍到这了,更多相关Java8获取对象index下标内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java8中用foreach循环获取对象的index下标详解

本文链接: https://www.lsjlt.com/news/123859.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java8中用foreach循环获取对象的index下标详解
    前言 在Java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历List的时候想获取对象的index,但是Java8、9、10、11都没有相关的支持,...
    99+
    2022-11-12
  • 怎么在Java8中使用foreach循环获取对象的index下标
    这期内容当中小编将会给大家带来有关怎么在Java8中使用foreach循环获取对象的index下标,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Java8中,我们经常使用lambada表达式进行fore...
    99+
    2023-06-14
  • 利用for循环+foreach来获取数组中的最大值的下标
    在 index.php 定义函数 getMax,调用该函数传入 $array ,echo输出 $array 中最大值的下标。 (1)定义函数 getMax,函数接受一个一维数组(值不重复)参数          该函数使用逻辑判断可以...
    99+
    2023-09-30
    开发语言 php
  • 解决Mybatis中foreach嵌套使用if标签对象取值的问题
    目录foreach嵌套使用if标签对象取值问题大体格式解决办法代码如下Mybatis if 语句嵌套要求foreach嵌套使用if标签对象取值问题 最近做项目过程中,涉及到需要在 M...
    99+
    2022-11-13
  • 如何解决Mybatis中foreach嵌套使用if标签对象取值的问题
    今天小编给大家分享一下如何解决Mybatis中foreach嵌套使用if标签对象取值的问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作