我试图通过以下方式通过Rx flatmap()运算符替换Rx filter()运算符的使用:
(早期使用过滤器())
Observable.<String>just("A1", "A2")
.filter(s -> s.contains("1"))
.subscribe(s -> {System.out.println(s);});
(通过flatMap()取代)
1. Func1<String, Observable<String>> func = s -> s.contains("1") ? Observable.<String>just(s) : Observable.empty();
2. Observable.<String>just("A1", "A2")
//.flatmap( s -> (s.contains("1")) ? Observable.<String>just(s) : Observable.<String>empty() )// <--------- this approach did not work
3. //.flatmap( s -> { return (s.contains("1")) ? Observable.<String>just(s) : Observable.<String>empty(); } )// <--------- this approach did not work
4. .flatMap(func) <---- this worked
5. .subscribe(s -> {System.out.println(s);});
只有当我在第1行定义了一个显式的Func1对象时,这个替换才起作用。在第2行和第3行定义的Lambdas不起作用。我能想到的唯一原因是Java编译器将2和3视为非值返回表达式,但不确定原因。
有人可以建议我如何在第2和第3行使用方法?