定义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()));
}));