为了账号安全,请及时绑定邮箱和手机立即绑定

如何等待 lambda 表达式完成

如何等待 lambda 表达式完成

手掌心 2023-06-08 19:39:25
我对 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 casereturn isdownload.get();}
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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


});


查看完整回答
反对 回复 2023-06-08
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信