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;
    }
 @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;
    }
 /**
     * 把列表转换为树结构
     *
     * @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;
    }

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

3、使用泛型来接收对象

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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bst@微胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值