思路的凝滞

最近用ext开发一个类似列表性的东西,为了直观一些我截屏了幅图.

数据的组装结构是LinkedHashMap<String, LinkedHashMap<String, LinkedList<TargetObject>>>最里面的TargetObject是真正里面显示的页面所需要的数据.

由于当时的难点是前台的显示,所以在开发后台程序的时候,也是前台程序显示的思路编写:先组转最外层的LinkedHashMap,然后组装里面的LinkedHashMapLinkedList.

程序如下:

  LinkedHashMap<String,LinkedHashMap> nodeHashMap = new LinkedHashMap<String,LinkedHashMap>();
  LinkedHashMap<String,LinkedList<TargetObject>> companyHashMap = null;
  TargetObject taskObject = new TargetObject();
  taskObject.setFlowId(flowId);
  
  List<TargetObject> tempTaskList = netdTaskService.searchTargetObjectList(taskObject);
  
  //set detailObject to null as judgement afterward
  detailObject = null;
  
  LinkedHashMap<String,LinkedList<TargetObject>> nodeStoredList = new LinkedHashMap<String,LinkedList<TargetObject>>();

  String[] flowArray = new String[]{"zdwlsjzzfa","shwlsjzzfa","spwlsjzzyj","zdjhhjtap","zzrzzwlsj","shwlsjzzjg","zxwlsjzzbcs","fxzxqkbtxssjg","gd"};
  
  for(String htName : flowArray){
   nodeStoredList.put(htName, new LinkedList<TargetObject>());
  }

  
  if(tempTaskList.size()>0){
   LinkedList<TargetObject>  nodeList;
   
   for(String htName : flowArray){
    for(TargetObject temp : tempTaskList){
     if(htName.equals(temp.getHtName())){
      //seperate history task to different node
      nodeList = nodeStoredList.get(htName);
      nodeList.add(temp);
      
      //for echoing detail info if exist
      if(detailObject==null&&htName.equals(object.getHtName())&& userId.equals(temp.getOwnerId())){
       detailObject = temp;
      }
     }
    }
   }
 
   for(Map.Entry<String,LinkedList<TargetObject>> nodeEntry : nodeStoredList.entrySet()){
    //get the history task list related to node
    nodeList = nodeEntry.getValue();
    
    if(nodeList.size()>0){
     companyHashMap = new LinkedHashMap<String,LinkedList<TargetObject>>();
     String nodeChineseName = ((TargetObject)nodeList.get(0)).getHtDescription();
     
     while(nodeList.size()>0){
      Iterator<TargetObject> it = nodeList.iterator();
      
      LinkedList<TargetObject> companyLinkedList = new LinkedList<TargetObject>();
      //there must be some task record if coming here
      String companyName = (nodeList.get(0)).getCompanyName();

      
      while(it.hasNext()){
       TargetObject tempTask = it.next();
       if(companyName.equals(tempTask.getCompanyName())){
        companyLinkedList.add(tempTask);
        
        //remove the task record when be gathered
        it.remove();
       }
      }
      
      //put history task list into company HashMap
      companyHashMap.put(companyName, companyLinkedList);

     }
     
     //put HashMap of comany into node map
     nodeHashMap.put(nodeChineseName,companyHashMap);

    }
    else {
     //break when there's no task record from this node
     break;
    }
   }
  
  }

后来发现可以从数据的角度考虑组装,而且实现起来比较简洁.

  LinkedHashMap<String,LinkedHashMap> nodeHashMap = new LinkedHashMap<String,LinkedHashMap>();
  TargetObject taskObject = new TargetObject();
  taskObject.setFlowId(flowId);
  List<TargetObject> tempTaskList = netdTaskService
    .searchTargetObjectList(flowId);
  LinkedHashMap<String, LinkedList<TargetObject>> nodeHistoryMap = new LinkedHashMap<String, LinkedList<TargetObject>>();
  LinkedList<TargetObject> companyList = new LinkedList<TargetObject>();
  TargetObject tempObject;
  if (TextUtil.isNull(tempTaskList))
   return;
  for (int i = 0; i < tempTaskList.size(); i++) {
   tempObject = tempTaskList.get(i);
   nodeHistoryMap = nodeHashMap.get(tempObject.getHtDescription());
   //如果不存在创建一个新的节点列表
   if (nodeHistoryMap != null) {
    companyList = nodeHistoryMap.get(tempObject.getCompanyName());
    //如果不存在创建一个新的公司列表
    if (companyList != null) {
     companyList.add(tempObject);
    } else {
     companyList = new LinkedList<TargetObject>();
     companyList.add(tempObject);
     //组装公司列表
     nodeHistoryMap.put(tempObject.getCompanyName(),
       companyList);
    }
   } else {
    companyList = new LinkedList<TargetObject>();
    companyList.add(tempObject);
    nodeHistoryMap = new LinkedHashMap<String, LinkedList<TargetObject>>();
    //组装公司列表
    nodeHistoryMap.put(tempObject.getCompanyName(), companyList);
    //组装节点列表
    nodeHashMap.put(tempObject.getHtDescription(), nodeHistoryMap);
   }
  }

现在想想,其实还是思路的凝滞,在开发的时候容易形成思维定势.记录一下,以后常记.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值