Как я могу преобразовать исходный код с помощью lambda?

#java #android #lambda #rx-java

#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;
                        }
                    });
  
  • Я видел в блоге, что лямбда применяется только к одному методу. Вы знаете, что это значит?

Комментарии:

1. Не проще ли было бы вам просто переместить свой анонимный DisposableObserver подкласс в именованный?

2. Но, кроме приведенного выше кода, существует множество DisposableObserver, которые выполняют различные действия в моем коде

3. Использование лямбд делает ваш код менее подробным, но не менее беспорядочным. Подумайте о том , чтобы не регистрировать каждую вторую строку кода …

4. О .. Спасибо, я понимаю это. Я удалю код протоколирования!

Ответ №1:

лямбда-выражения добавлены в Java 8. Чтобы использовать выражения lambda, вам нужно выполнить следующее внутри вашего build.gradle файла

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

Как только вышеуказанные изменения будут добавлены, просто перейдите к коду, который вы хотите преобразовать в lambda. Вы можете увидеть, как появляется желтая лампочка. Просто нажмите на это, и вы получите опцию с надписью «Заменить на lambda».

введите описание изображения здесь

Нажмите на него, и теперь вы можете увидеть лямбда-выражение.

введите описание изображения здесь

Ссылка:https://developer.android.com/studio/write/java8-support#configuration

Надеюсь, этот ответ поможет вам.

Комментарии:

1. Вчера я не смог увидеть предложение «Заменить на lambda», но я перезагрузил AndroidStudio, и это сработало! Спасибо за ответ!!