• List执行remove操作间歇性报错UnsupportedOperationException


            废话不多说,直接上一个代码,意思很简单,就是把list中的"全部"置顶,但是不知道怎么会偶发报错。

    1. List voList = new ArrayList<>(userGroupService.findByName(groupName));
    2. for(UserDept userDept : voList){
    3. if (userDept.getName().equals("全部")) {
    4. voList.remove(userDept);
    5. voList.add(0, userDept);
    6. break;
    7. }
    8. }

    开始分析,报错发生在传入groupName时,不传时操作正常,继续查查询方法。如下

    1. public List findByName(String name) {
    2. Searchable searchable = Searchable.newSearchable();
    3. Sort.Order order = new Sort.Order(Sort.Direction.DESC, "createTime");
    4. searchable.addSort(Sort.by(order));
    5. List deptList = new ArrayList<>();
    6. if(ObjectUtil.isNotEmpty(name)){
    7. searchable.addSearchFilter("name", SearchOperator.like, name);
    8. deptList = findAll(searchable).getContent();
    9. }else {
    10. return findAll();
    11. }
    12. return deptList;
    13. }

    表面看没有问题,返回的是正常的List,代码编译运行正常。仔细分析debug看,原来如此

    可以看到不传查询条件时, findAll  返回的正常的 ArrayList ,而传入条件查询返回的 UnmodifiableRandomAccessList  字面意思看就是不可修改list

    真相了,那解决方案就简单了,把返回的集合,新new一个集合就好了。

    List voList = new ArrayList<>(userGroupService.findByName(groupName));
  • 相关阅读:
    C语言典范编程
    2023-10-29 LeetCode每日一题(H 指数)
    XSS攻击笔记(上)
    linux库-----树莓派分文件编程
    Vue3 ref函数和reactive函数
    基于Springboot+MySQL的个人健康监控管理系统
    QT 使用mysql
    CPK分析工具页面设计源码
    第十章 引用
    Spring Boot 配置多数据源
  • 原文地址:https://blog.csdn.net/Qrind/article/details/133921059