簡體   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