RxJava:如何找到序列中较小的数字
RxJava: How to find the smaller number in a sequence
我正在尝试使用 RxJava 在序列中找到较小的数字。这是我第一次尝试解决这个任务。它有效(结果我得到了 1)但是因为我仍然是 RxJava 的新手我百分百肯定有更好的解决方案:
Observable<List<Integer>> sequence = Observable.create(new Observable.OnSubscribe<List<Integer>>() {
@Override
public void call(Subscriber<? super List<Integer>> subscriber) {
subscriber.onNext(Arrays.asList(new Integer[]{10, 9, 8, null, 1, 2, 3, 4}));
subscriber.onCompleted();
}
});
final int[] minValue = {Integer.MAX_VALUE};
sequence.flatMap(numList -> Observable.from(numList))
.filter(number -> number != null)
.filter(number -> {
if (number < minValue[0]) {
minValue[0] = number;
return true;
} else {
return false;
}
})
.last()
.subscribe(number -> {
Log.i("App", "The smaller value in the sequence is " + number);
});
关于如何正确执行此操作的任何建议? :)
使用 rxjava-math 模块,min() 运算符将执行您想要的操作。
sequence
.flatMap(numList -> Observable.from(numList)
.filter(number -> number != null)
.min()
.subscribe(number -> {
Log.i("App", "The smaller value in the sequence is " + number);
});
您还可以使用 reduce()
推出您自己的 min() 版本
sequence
.flatMap(numList -> Observable.from(numList)
.filter(number -> number != null)
.reduce(Integer.MAX_VALUE,
(currentMin, number) -> number < currentMin ? number : currentMin)
.filter(number -> number != Integer.MAX_VALUE)
.subscribe(number -> {
Log.i("App", "The smaller value in the sequence is " + number);
});
我正在尝试使用 RxJava 在序列中找到较小的数字。这是我第一次尝试解决这个任务。它有效(结果我得到了 1)但是因为我仍然是 RxJava 的新手我百分百肯定有更好的解决方案:
Observable<List<Integer>> sequence = Observable.create(new Observable.OnSubscribe<List<Integer>>() {
@Override
public void call(Subscriber<? super List<Integer>> subscriber) {
subscriber.onNext(Arrays.asList(new Integer[]{10, 9, 8, null, 1, 2, 3, 4}));
subscriber.onCompleted();
}
});
final int[] minValue = {Integer.MAX_VALUE};
sequence.flatMap(numList -> Observable.from(numList))
.filter(number -> number != null)
.filter(number -> {
if (number < minValue[0]) {
minValue[0] = number;
return true;
} else {
return false;
}
})
.last()
.subscribe(number -> {
Log.i("App", "The smaller value in the sequence is " + number);
});
关于如何正确执行此操作的任何建议? :)
使用 rxjava-math 模块,min() 运算符将执行您想要的操作。
sequence
.flatMap(numList -> Observable.from(numList)
.filter(number -> number != null)
.min()
.subscribe(number -> {
Log.i("App", "The smaller value in the sequence is " + number);
});
您还可以使用 reduce()
推出您自己的 min() 版本sequence
.flatMap(numList -> Observable.from(numList)
.filter(number -> number != null)
.reduce(Integer.MAX_VALUE,
(currentMin, number) -> number < currentMin ? number : currentMin)
.filter(number -> number != Integer.MAX_VALUE)
.subscribe(number -> {
Log.i("App", "The smaller value in the sequence is " + number);
});