java - 如何在匿名类java中分配变量值

标签 java android rx-java android-room

我想为列表变量分配一个结果值,但 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/

相关文章:

java - Ant 中的任务依赖顺序

android - 当应用程序尚未安装在设备中时,如何修复 iOS 中的深层链接?

java - 作为任何 RX 操作符调用 java 类内部的扩展函数

java - 反射在 Java 中有哪些适当和不适当的用途?

java - 在java中比较2个字符串数组并打印两个数组中相同的元素

java - 旋转的矩形改变位置

java - 如何从其他应用程序监控android studio中的网络搜索

android - RxSearchView 切换线程异常。在线等待

java - RxJava -2 Observables 随时接受更多 Observables?

java - Map.containsKey() 有用吗?