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

Я реализовал приведенный ниже код.

Сначала все было нормально, но со временем, когда был добавлен другой код, все стало грязно.

Поэтому я решил использовать лямбду.

Но я не знаю, как преобразовать его с помощью лямбда. Я пробовал много способов, но это не сработало.

Как я могу преобразовать его? А также Если есть место, чтобы увидеть соответствующие материалы ниже, пожалуйста, предложите мне. Спасибо!

Ниже мой код

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

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

Tom 02.04.2019 18:53

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

안홍경 02.04.2019 19:00

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

Mark 02.04.2019 20:16

О.. Спасибо, я понял. Я удалю код регистрации!

안홍경 03.04.2019 02:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

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

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

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

안홍경 03.04.2019 02:50

Другие вопросы по теме