gpt4 book ai didi

java - 如何等待 lambda 表达式完成

转载 作者:行者123 更新时间:2023-12-02 01:33:07 25 4
gpt4 key购买 nike

我的 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

});

关于java - 如何等待 lambda 表达式完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57543533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com