曾经写过一个感觉比较复杂的业务,大家看看是否能直接SQL解决呢?
2022/5/29 2:19:55
本文主要是介绍曾经写过一个感觉比较复杂的业务,大家看看是否能直接SQL解决呢?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
public static List excelSortLoanNo(List list) { Predicate<list> singleOrNot = equalsList -> equalsList.size() > 1; //可针对三种情况导出列表,对导出的借据号重复的放在一起(并提示与哪一行重复),为null的排除 List listVisiable = list.stream() .filter(exl -> { try { Field field = exl.getClass().getDeclaredField(LOAN_NUMBER); field.setAccessible(true); return field.get(exl) != null; } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return false; }) .sorted((in1, in2) -> { Field field1 = null; Field field2 = null; try { field1 = in1.getClass().getDeclaredField(LOAN_NUMBER); field2 = in2.getClass().getDeclaredField(LOAN_NUMBER); field1.setAccessible(true); field2.setAccessible(true); } catch (NoSuchFieldException e) { log.error("excelSortLoanNo字段不存在"); } return field1.hashCode() - field2.hashCode(); }) .collect(Collectors.groupingBy(exl -> { try { Field declaredField = exl.getClass().getDeclaredField(LOAN_NUMBER); declaredField.setAccessible(true); return declaredField.get(exl); } catch (IllegalAccessException e) { log.error("checkOutListCondition非法访问"); throw new RuntimeException("提取数据异常"); } catch (NoSuchFieldException e) { log.error("checkOutListCondition字段不存在"); throw new RuntimeException("提取数据异常"); } })) .values().stream() .filter(loanNoDuplicateList -> singleOrNot.test(loanNoDuplicateList)) .map(oneGroup -> { List sequenceIds = oneGroup.stream().map(one -> { try { Field declaredField = one.getClass().getDeclaredField(SEQUENCE_NAME); declaredField.setAccessible(true); return declaredField.get(one); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; }).collect(Collectors.toList()); return oneGroup.stream() .peek(one -> { try { Field failedReasons = one.getClass().getDeclaredField(FAILED_REASONS); failedReasons.setAccessible(true); Object reasonsOld = failedReasons.get(one); Field sequenceField = one.getClass().getDeclaredField(SEQUENCE_NAME); sequenceField.setAccessible(true); Object thisOneSequenceId = sequenceField.get(one); List sequenceIdList = sequenceIds.stream() .filter(se -> !se.equals(thisOneSequenceId)).collect(Collectors.toList()); Object[] sequenceIdArr = sequenceIdList.stream().toArray(); String sequenceIdArrStr = StringUtils.join(sequenceIdArr, ","); String failedReasonsFresh = reasonsOld.toString() //按测试需求,这里的字符串被更改处,都是在mapper中设定的failedReasons中的 //com/chinacscs/fgf/gi/mapper/GiExcelImportTempCommonMapper.java:23 .replace("excel内借据号重复", "excel内借据号重复,与序号" + sequenceIdArrStr + "条重复"); failedReasons.set(one, failedReasonsFresh); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }) .collect(Collectors.toList()); }) .reduce((l1, l2) -> { l1.addAll(l2); return l1; }) .filter(list1 -> !CollectionUtils.isEmpty(list1)) .orElse(Collections.EMPTY_LIST); list.removeAll(listVisiable); listVisiable.addAll(list); return listVisiable; }当时的注释: excel排序根据LoanNo 先进行整个list列表的序号填充 获取loanNo借据号不为空的进行排序,相同借据号的排序到一起 将相同借据号的数据提示,[与第2,3条借据号重复][与第1,3条借据号重复][与1,2条借据号重复] 可针对三种情况导出列表,对导出的借据号重复的放在一起(并提示与哪一行重复),为null的排除 TODO 因为现在导出列表时最后也有写入序号,所以在执行这个方法时只能取消导出时的写入序号操作
这篇关于曾经写过一个感觉比较复杂的业务,大家看看是否能直接SQL解决呢?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?