我有一个意外更新的列表。我有一个返回列表的函数。我想用不同的参数调用它两次,并将结果存储在一个长列表中。
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已经使用parameter2包含runSearch的更新结果。我希望它仍然保存带有parameter1的runSearch的结果。最终结果是我使用相互追加的parameter2获得了两个搜索副本。我想要的是使用参数1附加搜索来自存储在resultUrls变量中的参数2的搜索。
非常感谢任何帮助。
答案 0 :(得分: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());
答案 1 :(得分: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));