List<MainDataMd0006PO> listpo = BeanUtils.transferList(mainDataMd0006Params, MainDataMd0006PO.class); //查詢 存在的--根據批次編碼 List<MainDataMd0006PO> listup = mainDataMd0006Service.selectBatchIds(listpo); // 交集 (list1 & list2) 取list1 表的數據 List<MainDataMd0006PO> listupdate = listpo.stream().filter(item -> listup.stream().map(up -> up.getPOSID()).collect( Collectors.toList()).contains(item.getPOSID())).collect(Collectors.toList()); listupdate.stream().forEach(update -> listup.stream().filter(up -> Objects.equals(update.getPOSID(), up.getPOSID())). findAny().ifPresent(up -> update.setId(up.getId()))); // 差集 (list1 - list2) List<MainDataMd0006PO> listadd = listpo.stream().filter(item -> !listup.stream().map(up -> up.getPOSID()).collect( Collectors.toList()).contains(item.getPOSID())).collect(Collectors.toList());
更新多個字段示例
List<IrrigationPlanListDTO> irrigationPlanListDTOList=new ArrayList<>();
//賦值 irrigationTaskUniqueId irrigationPlanListDTOList.stream().forEach(update->irrigationTaskDOList.stream().filter( task->Objects.equals(update.getProcessId(),task.getProcessId()) ).findAny().ifPresent(task -> update.setIrrigationTaskUniqueId(task.getIrrigationTaskUniqueId()).setPlanUniqueId(task.getPlanUniqueId()) ));
更新多個字段時對應的實體類上面需要加注解 @Accessors
@Data @Accessors(chain = true) public class IrrigationPlanListDTO implements Serializable { /** * uniqueid */ private String planUniqueId; /** * 水肥灌溉計划名稱 */ private String planName; /** * 計划狀態,0=禁用,1=啟用 */ private Integer status; /** * 任務uniqueid * */ private String irrigationTaskUniqueId; /** * 進程id * */ private String processId; /** * 計划下的總耗時 * */ private Long timeCost; /** * 計划下總次數 * */ private Integer totalCount; }