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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值