Java8 通过foreach 遍历List,同时输出下标
Posted 在奋斗的大道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8 通过foreach 遍历List,同时输出下标相关的知识,希望对你有一定的参考价值。
定义lambada式工具类:
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class LambadaTools
/**
* 利用BiConsumer实现foreach循环支持index
*
* @param biConsumer
* @param <T>
* @return
*/
public static <T> Consumer<T> forEachWithIndex(BiConsumer<T, Integer> 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());
功能代码演示:
value.stream().forEach(LambadaTools.forEachWithIndex((item, index)->
// 当前生成序号
Integer currentSeqNo = seqNOMax + index + 1;
// 设置默认盒宽度
item.setBoxWidth(2.0);
// 补全盒涉及库房信息
String address = this.getWarehourseByLocation(item.getSid(), list, warehourseList);
if(StringUtils.isNotEmpty(address))
String[] warehourseArray = address.split("-");
item.setWarehouseSid(warehourseArray[0]);
item.setColumnSid(warehourseArray[1]);
item.setSegmentSid(warehourseArray[2]);
item.setLayerSid(warehourseArray[3]);
// 设置盒序号
item.setSeqNo(currentSeqNo);
// 设置批次号
item.setBatchNo(StringFormatUtil.addZeroForNum(String.valueOf(batchNoMax), 5));
// 生成案卷号= 项目/工程档号+ 盒序号
item.setBoxRegNo(this.getBoxRegNoByBoxSid(currentSeqNo, item.getSid()));
));
以上是关于Java8 通过foreach 遍历List,同时输出下标的主要内容,如果未能解决你的问题,请参考以下文章
在Java8中foreach()不能break,如果需要continue时,怎么办
Kotlin集合操作 ③ ( List 集合遍历 | for in | forEach | forEachIndexed | List 通过解构一次性给多个元素赋值 )
Kotlin集合操作 ③ ( List 集合遍历 | for in | forEach | forEachIndexed | List 通过解构一次性给多个元素赋值 )