#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, и это сработало! Спасибо за ответ!!