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

  介绍

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

Java2遍历集合

遍历集合的代码,可以是采用迭代器接口,通过下一个()遍历。如:

,, List, list =, arrays . aslist (“Hi",,,我,,,我,,,“Henry.Yao");//才能,此处已经用到了泛型,不能算是纯粹的Java2代码,仅作迭代器示范   for 才能;(Iterator, it =, list.iterator ();, it.hasNext ();), {   ,,,String  item =, it.next ();   ,,,System.out.println (“listItem =,,, +,项);   以前,,}

输出:

列=你好
列=我列
=
列=亨利。姚

Java5遍历集合

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

,, List, list =, arrays . aslist (“Hi",,,我,,,我,,,“Henry.Yao");   的才能(String  item :列表),{   ,,,System.out.println (“listItem =,,, +,项);   ,,}

Java8遍历集合

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

,, list.forEach (item →, {   ,,,System.out.println (“listItem =,,, +,项);   });才能

需同时提供指数,咋办?

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

,, List, list =, arrays . aslist (“Hi",,,我,,,我,,,“Henry.Yao");   的才能(int 指数;,index

输出:

列表[0]=你好,
列表[1][2]=我
列表=我
[3]=亨利列表。姚

期望的遍历模式

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

,, list.forEach((,,指数),→,{   ,,,System.out.println (“listItem =,,, +,项);   ,,});//,Compile 误差

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

通过BiConsumer包装消费者实现

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

,,//,工具方法   public 才能static  & lt; T>, Consumer, consumerWithIndex (BiConsumer,消费者),{   ,,,class  Obj  {   ,,,,,int 我;   ,,,}   ,,,Obj  Obj =, new  Obj ();   ,,,return  t →, {   ,,,,,int  index =, obj.i + +;   ,,,,,consumer.accept (t),指数);   ,,,};   以前,,}

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

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

,, list.forEach (LambdaUtils.consumerWithIndex((,,指数),→,{   ,,,System.out.println(“列表(“时间+大敌;;index  +,“]=? +,项);   }));才能

思考过程

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

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

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

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