小编bpr*_*r10的帖子

如何在RxJava2中使用带有lambda表达式的DisposableObserver

我的用例是想在我的onNext中的某个条件之后处理.所以尝试使用DisposableObserver.这是有效的代码

Observable.just(1, 2, 3, 4)
    .subscribe(new DisposableObserver<Integer>() {
                     @Override
                     public void onNext(Integer integer) {
                       System.out.println("onNext() received: " + integer);
                       if (integer == 2) {
                         dispose();
                       }
                     }
                     @Override
                     public void onError(Throwable e) { System.out.println("onError()"); }
                     @Override
                     public void onComplete() { System.out.println("onComplete()"); }
                   }
    );
Run Code Online (Sandbox Code Playgroud)

现在,如果你尝试用lambda替换它,它会将lambda视为

subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,Action onComplete)
Run Code Online (Sandbox Code Playgroud)

现在这样做.通过从onSubscribe保存一次性用品,然后调用disposable.dispose(); 来自onNext.

  private Disposable disposable;
  private void disposableObserverTest() {
    Observable.just(1, 2, 3, 4)
        .subscribe(integer -> {
              System.out.println("onNext() received: " + integer);
              if (integer == 2) { …
Run Code Online (Sandbox Code Playgroud)

lambda android rx-java rx-android rx-java2

5
推荐指数
1
解决办法
1348
查看次数

在 Kotlin 中使用高阶函数将函数包装在 try catch 中

我有一组具有不同签名和参数的函数,但它们都可能抛出异常。我不想在每个函数中添加 try-catch,而是想编写一个内联函数,该函数将函数作为参数并在 try-catch 块中调用此函数,并返回包装异常的某些类型。


// first function. 
fun foo() -> String

// second function. 
fun bar(argument: String) -> Boolean


// Result Type
sealed class Result<out R> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
}

// Wrapper Function
inline fun <T, R> safeCall(call: (T) -> R): Result<R>


// This Returns Result<String>
safeCall { 
    foo()
}

// This Returns Result<Boolean>
safeCall { 
    bar()
}
Run Code Online (Sandbox Code Playgroud)

我在实施该方法时遇到问题safeCall()。理想情况下,我希望它适用于任何底层功能。我可以让它工作,foo()或者bar(argument: String)但不能两者兼而有之。

inline …
Run Code Online (Sandbox Code Playgroud)

generics functional-programming higher-order-functions kotlin

5
推荐指数
1
解决办法
2276
查看次数