如何在RxJava2中实现/使用maxBy?

时间:2018-01-19 14:29:57

标签: rx-java reactive-programming rx-java2

如何在RxJava2中实现/使用maxBy?我正在考虑收集/减少但不知道要传递什么作为种子值(它应该是Observable发出的第一个元素,我可以使用一些默认值,但它看起来并不干净)。

2 个答案:

答案 0 :(得分:0)

答案 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界面提供了一些您可能想要查看的功能工具。