如何从依赖于其他数据方法的方法中获取数据?

时间:2012-12-14 16:55:19

标签: java list methods parameter-passing

我有三种方法。

  1. 第一种方法从List(包含特定于我的应用程序的数据对象)中获取数据,然后调用第二种方法,将获取的数据作为参数传入。

  2. 然后,第二种方法使用此信息作为参考,从另一个列表中获取特定信息,调用第三种方法并将此信息作为参数传递给它。

  3. 第三种方法与第二种方法相同,使用传入的数据作为参考来查找列表中的特定数据。

  4. 现在的问题是,我想以完全不同的方式使用这些信息。

    我应该如何调用我的方法来获取数据?

    private void getRecords() {
        List<LabelSet> allSets = labelSetStructureService.getLabelSets();
        for (LabelSet labelSet : allSets) {
            List<LabelSet> groups = labelSetStructureService.getLabelGroupsForSet(labelSet.getId());
            for (LabelGroup group : groups) {
                 getValuesForLabel(group.getCustomerMeasure(), labelSetStructureService.getLabelsForLabelGroup(group.getCustomer().getId(), group.getId()), labelSet);
            }
        }
    }
    
    private void getValuesForLabel(CustomerMeasure measure, List<Label> labels, LabelSet labelSet) {
        for (Label label : labels) {
            List<LabelSet> usageRecs = labelDataService.getLabelData(label, LabelSetStorage.DAY_BY_MONTH_STORAGE, new DateTime(), new DateTime().minusWeeks(1));
            preProcessUsageRecs( usageRecs, labelSet);
        }
    }
    
    private List<LabelUsage> preProcessUsageRecs(List<LabelUsage> usageRecs, LabelSet labelSet) {
        //Format records, use list instead strings where possible
    
        List<LabelSet> usageRecords = usageRecs; {
          for( LabelUsage labelUsage : usageRecs)
              usageRecords.addAll(usageRecs);
        }
         return usageRecords;
        }
    

2 个答案:

答案 0 :(得分:0)

听起来你正在编写一些可疑的代码。根据您的描述,如果我理解了问题,您的API应该看起来像这样:

public void go(Map<MapKey,Collection<MyObject>> values, Keyword keyword)  
{  
      for(MapKey key: values.keyset())  
     {  
                 search(values.get(key),keyword);
     }  
}  

public void search(Collection<MyObject> searchSpace, Keyword key)  
{  
       for(MyObject currentSearch : searchSpace)  
       {  
            if(currentSearch == key)  
            {  
                //do something
            }  
       }  
}  

关键是你应该能够将搜索推广到一个函数中,如果需要特殊的东西,你可以将一些私有(帮助)函数应用于这个过程并通过switch语句绑定它们。

答案 1 :(得分:0)

Java是一种基于对象的语言,因此使用成员变量来存储该一次调用的结果,如下所示:

public List<LabelUsage> labels;
...
private List<LabelUsage> preProcessUsageRecs(List<LabelUsage> usageRecs, LabelSet labelSet) {
    //Format records, use list instead strings where possible

    List<LabelSet> usageRecords = usageRecs; {
      for( LabelUsage labelUsage : usageRecs)
          usageRecords.addAll(usageRecs);
    }
    this.labels = usageRecords;
     return usageRecords;
}

然后访问this.labels,无论您需要使用此方法的结果;