JAVA递归范例

本文提供了两个递归方法实现示例:一是通过递归启动和结束任务来触发相关事件;二是递归获取企业组织结构树。这两个示例展示了如何在Java中使用递归方法解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

范例一:  

/**
     * 递归启动任务触发相关事件
     * @describe:TODO
     * @param oriGroupList
     * @param groupId
     * @param level
     * @return
     * @throws ZdnstException
     * @author:yongqin.zhong
     * @time:Sep 29, 20148:10:21 PM
     */
    private void recurrenceStartTask(String taskId,ActionItemTask selItemTaskDto) throws ZdnstException {
        try{
            
            Map<String,Object> map=new HashMap<String,Object>();
            List<String> relStatusList=new ArrayList<String>();
            relStatusList.add(ConstantAction.SYS_ITEM_TASK_STATUS_SS);//开始-开始
            relStatusList.add(ConstantAction.SYS_ITEM_TASK_STATUS_SF);//开始-完成
            map.put("relStatusList", relStatusList);
            map.put("oriTaskId", taskId);
            List<Map> relationTaskList=atItemTaskDao.selectTaskRelByOriIdAndStatus(map);
            if(relationTaskList!=null&&relationTaskList.size()>0){
                for(Map dbItemTaskMap:relationTaskList){
                    ActionItemTask itemTaskDto=(ActionItemTask)JBeanUtils.convertMap(ActionItemTask.class, dbItemTaskMap);
                    String relactionStatus=itemTaskDto.getRelactionStatus();
                    if(ConstantAction.SYS_ITEM_TASK_STATUS_SS.equals(relactionStatus)){
                        recurrenceStartTask(itemTaskDto.getItemTaskId(),itemTaskDto);
                    }else if(ConstantAction.SYS_ITEM_TASK_STATUS_SF.equals(relactionStatus)){
                        recurrenceEndTask(itemTaskDto.getItemTaskId());
                    }
                }
            }
        } catch (ZdnstException e) {
            throw new ZdnstException(e.getCode());
        } catch (Exception e) {
            logger.error("Service method throws exception:", e);
            throw new ZdnstException(BaseCode.ERROR_CODE110, e);
        }
    }

    /**
     * 递归结束任务触发相关事件
     * @describe:TODO
     * @param taskId
     * @throws ZdnstException
     * @author:yongqin.zhong
     * @time:Dec 25, 20145:30:15 PM
     */
    private void recurrenceEndTask(String taskId) throws ZdnstException {
        try{
            
            
            Map<String,Object> map=new HashMap<String,Object>();
            List<String> relStatusList=new ArrayList<String>();
            relStatusList.add(ConstantAction.SYS_ITEM_TASK_STATUS_FS);//完成-开始
            relStatusList.add(ConstantAction.SYS_ITEM_TASK_STATUS_FF);//完成-完成
            map.put("relStatusList", relStatusList);
            map.put("oriTaskId", taskId);
            List<Map> relationTaskList=atItemTaskDao.selectTaskRelByOriIdAndStatus(map);
            if(relationTaskList!=null&&relationTaskList.size()>0){
                for(Map dbItemTaskMap:relationTaskList){
                    ActionItemTask itemTaskDto=(ActionItemTask)JBeanUtils.convertMap(ActionItemTask.class, dbItemTaskMap);
                    String relactionStatus=itemTaskDto.getRelactionStatus();
                    if(ConstantAction.SYS_ITEM_TASK_STATUS_FS.equals(relactionStatus)){
                        recurrenceStartTask(itemTaskDto.getItemTaskId(),itemTaskDto);
                    }else if(ConstantAction.SYS_ITEM_TASK_STATUS_FF.equals(relactionStatus)){
                        recurrenceEndTask(itemTaskDto.getItemTaskId());
                    }
                }
            }
        } catch (ZdnstException e) {
            throw new ZdnstException(e.getCode());
        } catch (Exception e) {
            logger.error("Service method throws exception:", e);
            throw new ZdnstException(BaseCode.ERROR_CODE110, e);
        }
    }

范例二:

    /**
     * 递归获取企业架构树形结构
     * @describe:TODO
     * @param oriGroupList
     * @param groupId
     * @param level
     * @return
     * @throws ZdnstException
     * @author:yongqin.zhong
     * @time:Sep 29, 20148:10:21 PM
     */
    private ArrayList<Group> getEnterpriseOrganization(List<Group> oriGroupList,String groupId,
            int level) throws ZdnstException {
        // 首先根据企业圈子ID得到改圈子的实际对象
        
        ArrayList<Group> clientGroups=new ArrayList<Group>();
        for (Group gpGroup : oriGroupList) {
            if(gpGroup.getParentId()!=null&&gpGroup.getParentId().equals(groupId)){
                clientGroups.add(gpGroup);
                //oriGroupList.remove(gpGroup);
            }
        }
        long seqNo=1L;
        for (Group gpGroup : clientGroups) {
            gpGroup.setGroupLevel(level+"");
            gpGroup.setSeqNo(seqNo+"");
            seqNo++;
            gpGroup.setGroupList(getEnterpriseOrganization(oriGroupList,
                    gpGroup.getGroupId(), level + 1));
        }
        return clientGroups;
    }



转载于:https://my.oschina.net/u/2322635/blog/390434

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值