如何等待lambda表达式完成

时间:2019-08-18 10:09:44

标签: java android lambda

我对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();

}

1 个答案:

答案 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

});