[英]how to assign variable value in an anonymous class java
我想將結果值分配給列表變量,但是lambda中的變量必須為final,如果為final,則無法接收值。
public List<PersonalInfo> getAllPatient() {
List<PersonalInfo> mPersonalInfoList;
AppDatabase db = AppDatabase.getAppDatabase(mContext);
db.patientDao().getAll()
.flatMapIterable(patientlist -> {
List<PersonalInfo> personalInfoList = new ArrayList<>();
for (PersonalInfo p: patientlist) {
p.setColor(getRandomMaterialColor("400"));
personalInfoList.add(p);
}
return personalInfoList;
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result ->
// error
mPersonalInfoList =result
);
return mPersonalInfoList;
}
問題在於,在將值分配給變量之前,您的方法將返回。 您可以使用鎖解決此問題。
嘗試這個:
public List<PersonalInfo> getAllPatient() {
final List<PersonalInfo> mPersonalInfoList = new ArrayList<>();
AppDatabase db = AppDatabase.getAppDatabase(mContext);
db.patientDao().getAll()
.flatMapIterable(patientlist -> {
List<PersonalInfo> personalInfoList = new ArrayList<>();
for (PersonalInfo p : patientlist) {
p.setColor(getRandomMaterialColor("400"));
personalInfoList.add(p);
}
return personalInfoList;
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
synchronized (mPersonalInfoList) {
mPersonalInfoList.addAll(result);
mPersonalInfoList.notifyAll();
}
}
);
synchronized (mPersonalInfoList) {
try {
mPersonalInfoList.wait();
} catch (InterrupedException ex) {
ex.printStackTrace();
}
}
return mPersonalInfoList;
}
您可以將本地變量轉換為類成員,它可以解決您的問題。
好了,您可以初始化mPersonalInfoList,而不是將結果分配給mPersonalInfoList。
所以:
final List<PersonalInfo> mPersonalInfoList = new ArrayList<>();
...
.subscribe(result ->
mPersonalInfoList.addAll(result);
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.