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