java.lang.UnsupportedOperationException: null异常处理(完美解决)
·
示例代码如下:
List<CustomerReceivablesAnalysisReportRespVO> result = new ArrayList<>();
List<CustomerReceivablesAnalysisReportRespVO> customerAcceptance = customerBalanceStatementMapper.getCustomerAcceptance(report);
List<CustomerReceivablesAnalysisReportRespVO> saleReceivables = customerBalanceStatementMapper.getSaleReceivables(report);
result.addAll(customerAcceptance);
result.addAll(saleReceivables);
if (report.getOrderType() != null && !report.getOrderType().equals("null")) {
result = result.stream().filter(item -> item.getOrderType().equals(report.getOrderType()))
.toList();
}
// 根据业务时间排序
result.sort(Comparator.comparing(CustomerReceivablesAnalysisReportRespVO::getBusinessDate));
问题背景:构建完这个集合,在运行时,对这个集合进行根据业务时间排序的时候报了UnsupportedOperationException
问题原因:Stream.toList()(Java 16+)返回的是 不可变列表(类似 List.of()),而后续代码可能尝试修改该列表(如 sort()、add()、remove()),导致抛出 UnsupportedOperationException。问题代码就是过滤呢一段!!!
解决方案:
result = result.stream()
.filter(item -> item.getOrderType().equals(report.getOrderType()))
.collect(Collectors.toCollection(ArrayList::new)); // 明确返回 ArrayList
result = result.stream()
.filter(item -> item.getOrderType().equals(report.getOrderType()))
.collect(Collectors.toList());
这两种方式都能解决。
总结:
- 问题本质:对
Stream.toList()的返回值行为理解不足,导致后续操作失败。 - 解决方案:优先使用
Collectors.toCollection(ArrayList::new)确保可变列表,或根据 Java 版本选择兼容方案。 - 预防措施:熟悉 Java 新特性的行为变化,避免隐式假设 API 行为。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)