• List<T>范型的使用


    1、范型的定义

    泛型就是指明集合中存储数据的类型。如果没有指明数据类型,那集合可以存储任意类型,就会存在上述提到的类型转换异常的安全隐患。

    2、范型的使用(根据单个属性值来的)

    • 例如现在我们要使用同一个方法,但是要传入list,但是里面的对象不同,我们应该如何处理呢?
     @Override
        public List<FolderVo> findLeftTrees(String caseOrderNo, Integer caseType) throws Exception {
            if (StringUtils.isBlank(caseOrderNo)) {
                throw new BusinessErrorException(BusinessMsgEnum.PARAM_EMPTY.code(), "案件流水号为空");
            }
            if (caseType == null) {
                CaseInfo caseInfo = caseInfoMapper.selectByPrimaryKey(caseOrderNo);
                if (caseInfo == null || caseInfo.getCaseType() == null) {
                    throw new BusinessErrorException(BusinessMsgEnum.PARAM_EMPTY.code(), "案件类型为空");
                }
                caseType = caseInfo.getCaseType();
            }
            //1. 查询t_dossier_cfg表中的目录配置信息
            List<DossierCfg> dossierCfgList = dossierCfgMapper.findDossierCfg(caseType);
            //2. 根据案件id,查询t_evidence表中的目录和文件信息
            List<Evidence> evidenceList = evidenceMapper.findEvidenceByCaseOrderNo(caseOrderNo);
            evidenceList = evidenceList.stream().filter(evidence -> StringUtils.isNotBlank(evidence.getParentCode())).collect(Collectors.toList());
            //3. 合并所有的文件和目录信息结构
            List<FolderVo> folderVoList = mergeFolder(dossierCfgList, evidenceList);
            //4. 递归合并文件夹
            folderVoList = TreeUtil.getTree(folderVoList, "folderCode", "0", "parentCode", "children");
            return folderVoList;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
     @Override
        public List<SysRespondentVo> getSysRespondentTree() throws Exception {
            SysRespondentQo qo = new SysRespondentQo();
            qo.setIsDelete(ConstantNum.N0);
            List<SysRespondent> list = sysRespondentMapper.selectInfo(qo);
            List<SysRespondentVo> listVo = new ArrayList<>();
            for (SysRespondent re : list) {
                SysRespondentVo vo = new SysRespondentVo(re);
                listVo.add(vo);
            }
            listVo = TreeUtil.getTree(listVo, "id", "0", "parentRespondent", "childList");
            return listVo;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
     /**
         * 把列表转换为树结构
         *
         * @param originalList      原始list数据
         * @param keyName           作为唯一标示的字段名称
         * @param region            根节点终结标识
         * @param parentFieldName   父节点字段名
         * @param childrenFieldName 子节点字段名
         * @return 组装后的集合
         */
        public static <T> List<T> getTree(List<T> originalList, String keyName, String region, String parentFieldName, String childrenFieldName) throws Exception {
            // 获取根节点
            List<T> topList = new ArrayList<>();
            Iterator<T> iterator = originalList.iterator();
            while (iterator.hasNext()) {
                T t = iterator.next();
                String parentId = BeanUtils.getProperty(t, parentFieldName);
                if (parentId.equals(region)) {
                    topList.add(t);
                    iterator.remove();
                }
            }
    
            // 递归封装树
            fillTree(topList, originalList, keyName, parentFieldName, childrenFieldName);
    
            return topList;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    这里如果只在方法里面些LIst<任意类型T>,上面两个方法会提示参数类型错误,这里如果要使用范型,返回值必须是<任意类型T> List<任意类型>类型的就不会报错。

    3、使用泛型来接收对象

    在这里插入图片描述
    这里利用反射来实现对象的实例化,从而得到具体的对象实例。

  • 相关阅读:
    Linux系列之链接
    计算机网络性能指标——时延,时延带宽积,RTT和利用率
    教你如何使用API接口获取数据
    Hash 表
    GS5MB-ASEMI贴片整流二极管GS5MB
    基于SSM的时间管理系统
    如何使用DBeaver连接Hive
    系列八、四大垃圾算法pk
    【JVM】JVisualVM的介绍、使用和GC过程
    mac使用n切换node版本
  • 原文地址:https://blog.csdn.net/zouyang920/article/details/127874678