怎么写出最优的循环代码
第一种
for (TradeMachineRef tradeMachineRef : tradeOrderMachineList) {
tradeMachineRef.setId(null);
}
int updateMachineSize = 0;
for (TradeMachineRef tmRef : tradeMachineRefs) {
for (TradeMachineRef tradeMachineRef : tradeOrderMachineList) {
if (null == tradeMachineRef.getId() && tradeMachineRef.getMachineTypeCode().equals(tmRef.getMachineTypeCode())) {
tradeMachineRef.setId(tmRef.getId());
tradeMachineRef.setOrderNo(orderNo);
updateMachineSize ++ ;
break;
}
}
}
if (updateMachineSize != tradeOrderMachineList.size()) {
throw new TradeBusinessException(TradeExceptionEnum.CHECK_FAILURE);
}
第二种
Map<String,List<TradeMachineRef>> machineMap = new HashMap<>();
// 遍历数据库的设备集合
for (TradeMachineRef tradeMachineRef : tradeMachineRefs) {
List<TradeMachineRef> tmrList = machineMap.get(tradeMachineRef.getMachineTypeCode());
if (CollectionUtils.isEmpty(tmrList)){
tmrList = new ArrayList<>();
}
tmrList.add(tradeMachineRef);
machineMap.put(tradeMachineRef.getMachineTypeCode(), tmrList);
}
// 遍历参数: 设备集合
for (TradeMachineRef tradeMachineRef : tradeOrderMachineList) {
List<TradeMachineRef> tmrList = machineMap.get(tradeMachineRef.getMachineTypeCode());
if (CollectionUtils.isNotEmpty(tmrList)) {
TradeMachineRef tmr = tmrList.get(0);
tradeMachineRef.setId(tmr.getId());
tradeMachineRef.setOrderNo(orderNo);
tmrList.remove(tmr);
machineMap.put(tradeMachineRef.getMachineTypeCode(), tmrList);
} else {
throw new TradeBusinessException(TradeExceptionEnum.CHECK_FAILURE, "订单设备类型编码不一致");
}
}
第三种
machineMap = tradeMachineRefs.stream()
.filter((TradeMachineRef dto) -> dto.getId() != null).collect(Collectors.groupingBy(TradeMachineRef::getMachineTypeCode));
// 遍历参数: 设备集合
for (TradeMachineRef tradeMachineRef : tradeOrderMachineList) {
List<TradeMachineRef> tmrList = machineMap.get(tradeMachineRef.getMachineTypeCode());
if (CollectionUtils.isNotEmpty(tmrList)) {
TradeMachineRef tmr = tmrList.get(0);
tradeMachineRef.setId(tmr.getId());
tradeMachineRef.setOrderNo(orderNo);
tmrList.remove(tmr);
machineMap.put(tradeMachineRef.getMachineTypeCode(), tmrList);
} else {
throw new TradeBusinessException(TradeExceptionEnum.CHECK_FAILURE, "订单设备类型编码不一致");
}
}