返回顶部
首页 > 资讯 > 精选 >怎么在Java8中给forEach()函数提供index值
  • 398
分享到

怎么在Java8中给forEach()函数提供index值

2023-06-14 05:06:49 398人浏览 泡泡鱼
摘要

怎么在Java8中给forEach()函数提供index值?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java2遍历集合遍历Collection的代码,可以是

怎么在Java8中给forEach()函数提供index值?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Java2遍历集合

遍历Collection的代码,可以是采用Iterator接口,通过next()遍历。如:

  List<String> list = Arrays.asList("Hi", "I", "am", "Henry.Yao");  // 此处已经用到了泛型,不能算是纯粹的Java2代码,仅作Iterator示范  for (Iterator<String> it = list.iterator(); it.hasNext();) {    String item = it.next();    System.out.println("listItem = " + item);  }

输出:

listItem = Hi
listItem = I
listItem = am
listItem = Henry.Yao

Java5遍历集合

在Java5中,提供了增强的for循环,如:

  List<String> list = Arrays.asList("Hi", "I", "am", "Henry.Yao");  for(String item : list) {    System.out.println("listItem = " + item);  }

Java8遍历集合

在Java8中,通过Lambda表达式提供了更简洁的编程方式,如:

  list.forEach(item -> {    System.out.println("listItem = " + item);  });

需同时提供index,咋办?

操作集合元素item的同时,如果还需要同时提供index值,咋办?
思考后,我们可能大都写出了如下的代码,同时心有不甘:

  List<String> list = Arrays.asList("Hi", "I", "am", "Henry.Yao");  for(int index; index<list.size(); index++) {     String item = list.get(i);    System.out.println("list["+index+"] = "+item);  }

输出:

list[0] = Hi,
list[1] = I
list[2] = am
list[3] = Henry.Yao

期望的遍历模式

因为,如下的模式才是我们期望的模式

  list.forEach((item, index) -> {    System.out.println("listItem = " + item);  }); // Compile ERROR

这只是期望。实际上,jdk8并没有提供该函数,直至Jdk11也均没有提供该函数。

通过BiConsumer包装Consumer实现

“没有工具,我们制造工具” 定义如下的工具方法,基于这个工具方法,我们就能在遍历集合,同时提供item和index值:

  // 工具方法  public static <T> Consumer<T> consumerWithIndex(BiConsumer<T, Integer> consumer) {    class Obj {      int i;    }    Obj obj = new Obj();    return t -> {      int index = obj.i++;      consumer.accept(t, index);    };  }

这样的业务代码,是我期望的!

基于该工具方法,便可轻松编写如下业务代码,清晰、简洁:

  list.forEach(LambdaUtils.consumerWithIndex((item, index) -> {    System.out.println("list[" + index + "]=" + item);  }));

思考过程

这个工具方法的设计过程,也是参考借鉴了distinctByKey,如图:

  // 工具方法 public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Map<Object, Boolean> seen = new ConcurrentHashMap<>(); return t -> Objects.isNull(seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE)); }
  // 业务代码  // 从人员列表中过滤出一个子集(每个部门选一个人)  employees.stream().filter(distinctByKey(Employee::getDeptCode)).collect(toList());

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 怎么在Java8中给forEach()函数提供index值

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

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

猜你喜欢
  • 怎么在Java8中给forEach()函数提供index值
    怎么在Java8中给forEach()函数提供index值?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java2遍历集合遍历Collection的代码,可以是...
    99+
    2023-06-14
  • 详解Java8的forEach(...)如何提供index值
    Java2遍历集合 遍历Collection的代码,可以是采用Iterator接口,通过next()遍历。如: List<String> list = Arra...
    99+
    2024-04-02
  • 怎么在Java8中使用foreach循环获取对象的index下标
    这期内容当中小编将会给大家带来有关怎么在Java8中使用foreach循环获取对象的index下标,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Java8中,我们经常使用lambada表达式进行fore...
    99+
    2023-06-14
  • foreach循环怎么在java8项目中使用
    这篇文章将为大家详细讲解有关foreach循环怎么在java8项目中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.首先遍历一个List方式1.一开始是这样的:public stati...
    99+
    2023-05-31
    java foreach循环 fo
  • 怎么在python中为marshmallow提供默认值
    今天就跟大家聊聊有关怎么在python中为marshmallow提供默认值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有...
    99+
    2023-06-15
  • JavaScript中forEach函数怎么用
    小编给大家分享一下JavaScript中forEach函数怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!forEach 函数语法: arr.for...
    99+
    2023-06-17
  • 怎么在java8中对函数进行引用
    怎么在java8中对函数进行引用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。函数引用的类型函数引用分为以下四种:静态函数,比如 Integer 类的 pars...
    99+
    2023-05-31
    java8 中对 ava
  • django中间件怎么给下一个函数赋值
    在Django中间件中,可以通过request对象的属性来给下一个函数赋值。下面是一个简单的示例代码: class CustomMi...
    99+
    2024-03-04
    django
  • 怎么在Java8中利用forEach语句对List和Map进行循环
    本文章向大家介绍怎么在Java8中利用forEach语句对List和Map进行循环的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序...
    99+
    2023-06-06
  • C#中怎么赋值给数组
    今天小编给大家分享一下C#中怎么赋值给数组的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。赋值给数组您可以通过使用索引号赋值给...
    99+
    2023-06-17
  • 如何在Java中使用Apache提供的函数数据类型?
    Java是一种广泛使用的编程语言,因为它在处理大型软件项目和应用程序时非常有用。Apache是一个流行的开源软件基金会,提供了许多Java程序员可以使用的库和框架。其中,Apache的函数数据类型库非常实用,本文将介绍如何在Java中使用A...
    99+
    2023-08-16
    函数 数据类型 apache
  • 在PHP中怎么用给定的值填充数组
    这篇文章将为大家详细讲解有关在PHP中怎么用给定的值填充数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。语法如下:array_pad ( array $array ...
    99+
    2023-06-14
  • 怎么在Java8项目中实现一个函数式编程
    这期内容当中小编将会给大家带来有关怎么在Java8项目中实现一个函数式编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。函数式的思考命令式编程一般我们实现一个系统有两种思考方式,一种专注于如何实现,比如下...
    99+
    2023-05-31
    java8 函数式编程 ava
  • ajax异步回调函数中怎么给外部变量赋值
    本篇内容介绍了“ajax异步回调函数中怎么给外部变量赋值”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!复制...
    99+
    2024-04-02
  • PHP中怎么给二维数组赋值
    今天就跟大家聊聊有关PHP中怎么给二维数组赋值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。PHP本身是一种简单而强大的语言。PHP语言拥有核心特性如强大的字符串和数组处理能力,同时...
    99+
    2023-06-17
  • java中怎么给数组元素赋值
    在Java中,可以使用循环结构来遍历数组,并给数组元素赋值。以下是几种常见的给数组元素赋值的方式:1. 使用循环结构逐个给数组元素赋...
    99+
    2023-10-18
    java
  • php中怎么给数组元素赋值
    在php中,数组是一种非常常见的数据结构。数组的元素可以是任何类型的数据:数字、字符串,甚至是另一个数组。在php中给数组元素赋值非常简单,只需要调用数组变量和元素索引,然后将值分配给元素即可。以下是一个示例:// 定义一个数组 $arr ...
    99+
    2023-05-19
  • vb中怎么用inputbox给数组赋值
    在VB中,可以使用InputBox函数来获取用户输入的值,然后将这些值赋给数组。以下是一个示例代码: Dim myArray(4) ...
    99+
    2024-04-02
  • 如果我们尝试仅向 MySQL EXTRACT() 函数提供日期值来提取时间值,会输出什么?
    当我们尝试从日期中提取小时值时,EXTRACT() 函数将给出输出 0 并带有警告,如下面给出的示例所示 -mysql> Select EXTRACT(Hour from '2017-10-20'); +-...
    99+
    2023-10-22
  • 怎么在python中使用range()函数指定数值
    怎么在python中使用range()函数指定数值?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作