这个lambda方法的扩展代码是什么?

时间:2017-05-02 13:43:11

标签: android lambda rx-java2

我尝试使用Rx2Animations Library,但它在样本中使用了Lambda变量。所以,我不太清楚如何在常规代码中扩展lambda。

示例:

package oxim.digital.rx2animations.colorpicker;

import java.util.concurrent.TimeUnit;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;

public final class ColorPickerPresenter extends BasePresenter<ColorPickerContract.View> implements ColorPickerContract.Presenter {

    @Override
    public void refreshView() {
        final ColorPickerContract.View view = getNullableView();
        if (view == null) {
            return;
        }

        final Disposable animationDisposable = view.setupInitialAnimation()
                .delay(500, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .concatWith(view.startInitialAnimation())
                .subscribe(this::onAnimationEnd, Throwable::printStackTrace);

        addSubscription(animationDisposable);
    }

    private void onAnimationEnd() {

    }

}

内部订阅方法出现lambda。

谢谢

1 个答案:

答案 0 :(得分:1)

第一个lambda是onNext()处理程序,this::onAnimationEnd()是执行onAnimationEnd方法的方法引用,这里有编译错误,因为onNext会发出一些对象,所以该方法应该有匹配的param :
 private void onAnimationEnd(EmittedObject o)
 (在此示例代码中EmittedObject,但它应该是Observable发出的实际对象类型。 第二个lambda参数是onError()通知处理程序,它也是方法引用,这次是Throwable.printStackTrace()方法。

一般来说,IDE(Android Studio)是你最好的朋友,你可以让它根据你选择的签名自动生成你的代码。

  final Disposable animationDisposable = view.setupInitialAnimation()
            .delay(500, TimeUnit.MILLISECONDS)
            .observeOn(AndroidSchedulers.mainThread())
            .concatWith(view.startInitialAnimation())
            .subscribe(new Consumer<EmittedObject>() {
                @Override
                public void accept(@NonNull EmittedObject o) throws Exception {
                    onAnimationEnd(o);
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(@NonNull Throwable throwable) throws Exception {
                    throwable.printStackTrace();
                }
            });