繁体   English   中英

如何等待lambda表达式完成

[英]how to wait for lambda expression finish

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

}

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

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM