介绍 Java2遍历集合
怎么在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()函数提供索引值