我有一个java的URL列表。我希望为列表中的每个URL调用一个函数。此功能将URL添加到列表中。 是否可以遍历所有URL,包括列表中新添加的URL?
for(String links: urls) {
ar = getNews(links);
}
在getNews()
内有:
urls.add(json.optString("next"));
我使用递归成功完成了这项工作。致电:
getNews(json.optString("next"));
在getNews()
答案 0 :(得分:2)
您可以使用常规for
循环并在每次迭代时更改条件
int size = 1;
for (int i = 0 ; i < size ; ++i) {
ar = getNews(urls.get(i));
size = urls.size();
}
答案 1 :(得分:1)
使用队列而不是列表:
Queue<String> q = new LinkedList<>();
q.add(initial urls);
while (!q.isEmpty()) {
String url = q.pop();
q.addAll(readNews(url));
}
我假设此代码位于readNews
方法之外,即此处没有递归。
此外,由于我认为这是某种抓取工具,您可能希望跟踪之前访问过的网址,以避免再次访问它们:
Queue<String> q = new LinkedList<>();
Set<String> visited = new LinkedHashSet<>();
q.add(initial urls);
while (!q.isEmpty()) {
String url = q.pop();
if (!visited.contains(url)) {
visited.add(url);
q.addAll(readNews(url));
}
}