java 实现递归算法 任务调度依赖表

import java.sql.SQLException;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.*;
import java.util.Iterator;


public class Function {
    private List<Map<String, String>> resultAll=new ArrayList<Map<String, String>>();
    private Set<String> SetAllJobName = new HashSet<String>();

    public  List<Map<String, String>> getListResultDependency(List list,String string,boolean isUp) throws SQLException {

        List<Map<String, String>> resultAll_tmp=new ArrayList<Map<String, String>>();
       if(listContainsResult(list,string,isUp)==null)
           return resultAll_tmp;
        else {
           resultAll_tmp=listContainsResult(list,string,isUp);
           resultAll.addAll(resultAll_tmp);
           //System.out.println(resultAll_tmp);
           for (int i = 0; i <resultAll_tmp.size(); i++) {
               Map<String,String> map = (Map)resultAll_tmp.get(i);
               String dependency_Job=null;
               String etl_Job=null;
               for(Entry<String, String> vo : map.entrySet()){
                    etl_Job= vo.getKey();
                    dependency_Job=vo.getValue();
                   if (isUp) {
                       if(!SetAllJobName.contains(dependency_Job)){
                           this.SetAllJobName.add(dependency_Job);
                           getListResultDependency(list, dependency_Job, isUp);
                       }

                   } else {
                       if(!SetAllJobName.contains(etl_Job)){
                           this.SetAllJobName.add(etl_Job);
                           getListResultDependency(list, etl_Job, isUp);
                       }

                   }
               }

           }
           return resultAll_tmp;
       }

    }

    public List<Map<String, String>> getresultAll(){
        return this.resultAll;
    }

    public  List<Map<String, String>> listContainsResult(List list,String string,boolean isUp) throws SQLException{
        List<Map<String, String>> result=new ArrayList<Map<String, String>>();
        if(list!=null){
            if (isUp){//向上寻找
                int num=0;//string在list是否存在
                for(int i=0;i<list.size();i++)
                {
                    Map map = (Map)list.get(i);
                    Map<String, String> resultMap = new HashMap<String, String>();
                    Iterator<Entry<String,String>> iter = map.entrySet().iterator();
                    String etl_job =null;
                    String dependency_Job = null;
                    while(iter.hasNext()){
                        Entry<String,String> entry = iter.next();
                        String key = entry.getKey();
                        String value = entry.getValue();
                        if(key.equalsIgnoreCase("etl_job")&& value.equalsIgnoreCase(string)||key.equalsIgnoreCase("dependency_Job")){
                            if(key.equalsIgnoreCase("etl_job")){
                                etl_job=value;
                            }else{
                                dependency_Job=value;
                            }
                        }
                    }
                    if(etl_job!=null&&dependency_Job!=null){
                        resultMap.put(etl_job,dependency_Job);
                        num++;
                        result.add(resultMap);
                    }
                }
                //循环完看string是否存在
                if (num==0)
                    return null;
                else
                    return result;
            }else{//向下寻找
                int num=0;//string在list是否存在
                for(int i=0;i<list.size();i++)
                {
                    Map map = (Map)list.get(i);
                    Map<String, String> resultMap = new HashMap<String, String>();
                    Iterator<Entry<String,String>> iter = map.entrySet().iterator();
                    String etl_job =null;
                    String dependency_Job = null;
                    while(iter.hasNext()){
                        Entry<String,String> entry = iter.next();
                        String key = entry.getKey();
                        String value = entry.getValue();
                        if(key.equalsIgnoreCase("dependency_Job")&& value.equalsIgnoreCase(string)||key.equalsIgnoreCase("etl_job")){
                            if(key.equalsIgnoreCase("etl_job")){
                                etl_job=value;
                            }else{
                                dependency_Job=value;
                            }
                        }
                    }
                    if(etl_job!=null&&dependency_Job!=null){
                        resultMap.put(etl_job,dependency_Job);
                        num++;
                        result.add(resultMap);
                    }
                }
                //循环完看string是否存在
                if (num==0)
                    return null;
                else
                    return result;
            }

        }  else{
            return list;
        }

    }
}

其中传入的参数是(List list,String string,boolean isUp)

list是依赖表全部数据,里边是map,数据结构为[{map},{map}....]

string是要查看那个任务的任务名

isUp 真 代表向上查影响性分析,假  代表向下血缘性分析

返回list [{etl_job->dependency_job},{etl_job->dependency_job},...]

实现的有点笨重呀

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

##是年 实现这个功能她还在身边调试BUG,感叹算不尽芸芸众生微贱命,回头看五味杂陈奈何天!祝你好运吧!。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值