我对lambda表达式有疑问;我在返回类型方法中使用了lambda表达式,但是return isDownloaded.get()
在lambda表达式之前执行。我如何等待lambda完成?
public boolean isDowloaded(int id) {
AtomicReference<Boolean> isdownload = new AtomicReference<>(false);
AtomicReference<List<Download>> downloadList = new AtomicReference<>();
MyApplication.getInstance().getFetch().getDownloads(downloads -> {
downloadList.set(downloads);
for (int i = 0; i < downloadList.get().size(); i++) {
if (downloadList.get().get(i).getExtras().getString("id","").equals(String.valueOf(id)) ) {
PlayerConstants.SONG_NUM = i;
isdownload.set(true);
}
}
});
// always return false in this case
return isdownload.get();
}
答案 0 :(得分:0)
lambda并不是问题所在。
getDownloads()
调用是异步的。因此,调用isDowloaded()
的方法不应返回boolean
,因为它不知道何时完成处理。
它应该是void
方法。 Fetch
API的主要功能之一是
在后台下载。
因此,您必须实现回调以执行后处理。
2种可能性:
FetchListener
。 例如:
MyApplication.getInstance().getFetch().getDownloads(downloads -> {
downloadList.set(downloads);
for (int i = 0; i < downloadList.get().size(); i++) {
//...
}
// ... DO your post processing here
});