Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从依赖其他方法获取数据的方法中获取数据?_Java_List_Methods_Parameter Passing - Fatal编程技术网

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

Java 如何从依赖其他方法获取数据的方法中获取数据?,java,list,methods,parameter-passing,Java,List,Methods,Parameter Passing,我有三种方法 第一个方法从包含my应用程序特定数据对象的列表中获取数据,然后调用第二个方法,将获取的数据作为参数传递进来 然后,第二个方法使用此信息作为引用,从另一个列表中获取特定信息,调用第三个方法并将此信息作为参数传递给它 第三种方法与第二种方法相同,使用传入的数据作为引用来查找列表中的特定数据 现在的问题是,我想用一种完全不同的方法来使用这些信息 我应该如何调用我的方法以获取数据 private void getRecords() { List<LabelSet> al

我有三种方法

第一个方法从包含my应用程序特定数据对象的列表中获取数据,然后调用第二个方法,将获取的数据作为参数传递进来

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

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

现在的问题是,我想用一种完全不同的方法来使用这些信息

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

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;
    }

听起来你在写一些可疑的代码。根据您的描述,如果我理解问题,您的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语句将其绑定。

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

需要进一步的解释如果没有太多的代码,那么也很高兴看到通过return语句将所有内容都传递回来?新方法与其他方法在同一类中完全不同吗??如果我理解正确,你只想使用第三种方法获得的信息,那么,为什么您不能拥有一个实例变量并在以后保存该信息呢?您可以在完全不同的方法中使用它。实例成员或类成员(静态)有时不适合或不正确地维护数据一致性,特别是在web等多用户环境中。谢谢您的提醒!有时候,简单的解决方案是你想不到的@狮子:你能给我解释一下吗?我只是在说一些情况,使用一些变量或对象作为实例成员会导致数据不一致。关于Servlet容器,它在加载时只初始化一次,然后在每个请求之间共享。因此,将请求或会话范围的数据作为Servlet实例成员在每个请求之间共享,从而导致数据不一致状态,这可能是或可能不是问题的情况,OP使用的代码是未定义的,尽管它显然是一个独立的应用程序。