猿问

如何等待 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();

}


手掌心
浏览 131回答 1
1回答

幕布斯6054654

lambda 不是那里的问题。调用getDownloads()是异步的。因此,isDowloaded()调用该方法的方法不应返回 a boolean,因为它不知道处理何时完成。它应该是一种void方法。主要的 api 功能之一Fetch是在后台下载。所以你必须实现一个回调来执行后处理。2种可能性:实施并添加一个FetchListener.在异步调用返回后执行后处理。例如 :MyApplication.getInstance().getFetch().getDownloads(downloads -> {    downloadList.set(downloads);    for (int i = 0; i < downloadList.get().size(); i++) {       //...    }    // ... DO your post processing here});
随时随地看视频慕课网APP

相关分类

Java
我要回答