我想为列表变量分配一个结果值,但 lambda 中的变量必须是最终变量,如果是最终变量,则无法接收值。
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;
}
关于java - 如何在匿名类java中分配变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49586381/