如何使用lambda转换源代码?

时间:2019-04-02 16:50:01

标签: java android lambda rx-java

我实现了以下代码。

起初还可以,但是随着时间的流逝并添加了其他代码,它变得混乱了。

所以我决定使用lambda。

但是我不知道如何使用lambda进行转换。 我尝试了很多方法,但是没有用。

如何转换?和 如果有地方可以看到下面的相关材料,请建议我。谢谢!

下面是我的代码

public void SaveBeaconId(){
    myCompositeDisposable.add(BeaconService.getBeaconObservable()
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribeWith(new DisposableObserver<ProximityZoneContext[]>() {
                @Override
                public void onNext(ProximityZoneContext[] proximityZoneContexts) {
                    for(int i=0; i<proximityZoneContexts.length; i++) {
                        bId = proximityZoneContexts[i].getDeviceId();
                        if (!beaconList.contains(bId)) {
                            beaconList.add(bId);
                            Log.d("OnNext Beacon add: ", bId);
                            //PostFcmData(bId,FirebaseInstanceIDService.refreshedToken,"ScoreData");
                        }
                    }
                    for(int i=0; i<beaconList.size(); i++) {
                        Log.d("Beacon List "+i,beaconList.get(i));
                    }

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            })
    );
}

final MyApplication application = (MyApplication) getApplication();
    RequirementsWizardFactory
            .createEstimoteRequirementsWizard()
            .fulfillRequirements(this,
                    new Function0<Unit>() {
                        @Override
                        public Unit invoke() {
                            Log.d("app", "requirements fulfilled");
                            application.enableBeaconNotifications();
                            return null;
                        }
                    },
                    new Function1<List<? extends Requirement>, Unit>() {
                        @Override
                        public Unit invoke(List<? extends Requirement> requirements) {
                            Log.e("app", "requirements missing: " + requirements);
                            return null;
                        }
                    },
                    new Function1<Throwable, Unit>() {
                        @Override
                        public Unit invoke(Throwable throwable) {
                            Log.e("app", "requirements error: " + throwable);
                            return null;
                        }
                    });
  • 我看到了博客,lambda仅适用于单一方法。你知道这是什么意思吗?

1 个答案:

答案 0 :(得分:2)

在Java 8中添加了lambda表达式。要使用lambda表达式,您需要在build.gradle文件中执行以下操作

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

添加了以上更改后,只需访问要转换为lambda的代码即可。您会看到一个黄色的灯泡出现。只需单击该按钮,您就会看到一个“替换为lambda”的选项。

enter image description here

单击它,您现在可以看到lambda表达式。

enter image description here

参考:https://developer.android.com/studio/write/java8-support#configuration

希望这个答案对您有帮助。