我正在使用 www.opensubtitles.org API 使用文件哈希获取字幕。现在,我的问题是它返回该特定文件的所有可用字幕。
例如:当我选择一个文件下载字幕时得到这个结果
http://i.stack.imgur.com/m2tZM.png
整个结果在这里: http: //privatepaste.com/download/22bb756930
它们之间的唯一区别是字幕 id 和字幕下载链接其余一切都是一样的。
现在我的问题是这个结果仅适用于 1 个文件,但我将使用多个文件,因此不可能获得第一个结果并使用它。
检索结果的代码如下
Map<?, ?> result = (Map<?, ?>) rpcClient.execute("SearchSubtitles", params);
Object[] data = (Object[]) result.get("data");
Map<?, ?>[] results = new Map<?, ?>[data.length];
int i = 0;
for (Object element : data) {
results[i] = (Map<?, ?>) element; //storing it in map
i++;
}
现在我想要的是,当我选择 12 个文件时,我只想为每个文件存储 1 个结果,而不是在上述情况下存储 3 个。
我确实让它工作了,但我的代码显然不好。我在凌晨 3 点写了这篇文章,花了 5 分钟,因为我唯一的目标是让它工作。
Map<?, ?> result = (Map<?, ?>) rpcClient.execute("SearchSubtitles", params);
Object[] data = (Object[]) result.get("data");
Map<?, ?>[] results = new Map<?, ?>[data.length];
int i = 0;
for (Object element : data) {
System.out.println(element);
results[i] = (Map<?, ?>) element;
i++;
}
List<String> idmbIDs = new ArrayList<String>();
for (Map<?, ?> map : results) {
String string = (String) map.get("IDMovieImdb");
if (!idmbIDs.contains(string))
idmbIDs.add(string); //stores distinct idmb ids.
}
List<String> removedIDMBids = new ArrayList<String>();
for (String store : idmbIDs) {
for (Map<?, ?> map : results) {
if (store.contains((String) map.get("IDMovieImdb")) && !removedIDMBids.contains(store)) {
removedIDMBids.add(store);
fileDetails.add(map);
}
}
}
for (Map<?, ?> realResult : fileDetails) {
System.out.println(realResult); <- this does what I want
}
我想要一个更好的方法来做这样的事情。如果我能使用(map.get("SubDownloadsCnt");
任何帮助,将不胜感激。如果我无法正确解释,请原谅我。请不要否定。