Java Rx flatmap()和Java Ternary运算符(?)

时间:2016-11-20 19:53:29

标签: lambda rx-java

我试图通过以下方式通过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行使用方法?

0 个答案:

没有答案