0

我有一个意外更新的列表。我有一个返回列表的函数。我想用不同的参数调用它两次,并将结果存储在一个长列表中。

List<URL> resultUrls = new ArrayList<URL>();
webPages.runSearch(parameter1);                   // runs search and stores result in a public variable of the object webPages
resultUrls = webPages.getUrls();                  // returns public variable
webPages.runSearch(parameter2);
resultUrls.addAll(webPages.getUrls());

在执行最后一行之前,resultUrls 已经包含使用参数 2 来自 runSearch 的更新结果。我希望它仍然保留带有参数 1 的 runSearch 的结果。最终结果是,我使用相互附加的 parameter2 获得了两个搜索副本。我想要的是使用 parameter1 进行搜索,并附加来自存储在 resultUrls 变量中的 parameter2 的搜索。

非常感激任何的帮助。

4

2 回答 2

2
List<URL> resultUrls = new ArrayList<URL>();
webPages.runSearch(parameter1);                   // runs search and stores result in a public variable of the object webPages
resultUrls = webPages.getUrls();                  // returns public variable

在这一点之后,您已经丢弃ArrayList您在第一条语句中创建的,现在resultUrls是对公共变量的引用,该变量是 所引用的对象的成员webPages

你应该能够从这一点上弄清楚。

提示:上面的最后一条语句应该是

resultUrls.addAll(webPages.getUrls());
于 2013-09-28T18:30:00.547 回答
0

我们不知道是什么webPages,但我怀疑问题在于您的runSearch方法没有创建新列表 - 它只是改变了现有列表。我怀疑您想创建第一个列表的副本。请注意,您不需要ArrayList<URL>您正在创建的原件,因为无论如何您都在丢弃它。

webPages.runSearch(parameter1); 
List<URL> resultUrls = new ArrayList<URL>(webPages.getUrls());
webPages.runSearch(parameter2);
resultUrls.addAll(webPages.getUrls());

(您可以从一个空列表开始,webPages.getUrls()然后在第一次调用之后添加结果,但这似乎有点毫无意义。)

但是,我建议您实际上更改您的设计,以便类型webPages无论如何都不是有状态的 - 相反,runSearch请返回相关列表。此时,您可以拥有:

List<URL> resultUrls = webPages.runSearch(parameter1);
resultUrls.addAll(webPages.runSearch(parameter2));
于 2013-09-28T18:31:19.680 回答