嗯,我不确定我是否理解你的问题.像这样的东西?
@Test
public void tesTakeUntil() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Observable.from(numbers)
.takeUntil(number -> number > 3)
.subscribe(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
它会打印出来
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
你可以看到更多的例子来点这里https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/filtering/ObservableTake.java
final String stop = "c";
Observable.just("a", "b", "c", "d")
.filter(item -> !item.equals(stop))
.takeUntil(item -> item.equals(stop))
.subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
输出:
c
Run Code Online (Sandbox Code Playgroud)
使用此解决方案,谓词仅需调用一次。
final String stop = "c";
Observable.just("a", "b", "c", "d")
.takeUntil(item -> item.equals(stop))
.lastElement()
.subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
输出:
c
Run Code Online (Sandbox Code Playgroud)