如何在RxJava2中实现/使用maxBy?我正在考虑收集/减少但不知道要传递什么作为种子值(它应该是Observable发出的第一个元素,我可以使用一些默认值,但它看起来并不干净)。
答案 0 :(得分:0)
没有种子的 .reduce()运算符也可用 - http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Observable.html#reduce-io.reactivex.functions.BiFunction-
答案 1 :(得分:0)
您可以同时使用无种子和种子reduce
:
Comparator<T> comparator = ... // define a relationship between Ts
source.reduce((last, current) ->
comparator.compare(last, current) >= 0 ? last : current);
例如,找到最长的字符串:
Observable.fromArray("a", "bb", "ccc", "d", "eee", "ffff")
.reduce((last, current) ->
Integer.compare(last.length(), current.length()) >= 0
? last : current)
.subscribe(System.out::println);
如果您使用的是Java 8+,Comparator
界面提供了一些您可能想要查看的功能工具。