skip相关的操作符主要包括skip,skipWhile,skipUntil,skipLast
最简单,顾名思义,跳过前n个元素,如果n超过元素个数,则以元素个数为准
@Test
public void textSkip() {
Flux.range(1, 10).skip(3).subscribe(System.out::println);
}
output:
4
5
6
7
8
9
10
与skip相反,跳过后n个元素
@Test
public void textSkip() {
Flux.range(1, 10).skipLast(3).subscribe(System.out::println);
}
1
2
3
4
5
6
7
当前n元素都符合predicate的条件,则跳过,直到出现第一个不符合条件的元素
@Test
public void textSkip() {
Flux.just(1, 10, 2, 9, 8).skipWhile(n -> n < 7).subscribe(System.out::println);
}
output
10
2
9
8
当前n元素都不符合predicat的条件,则跳过,直到出现第一个符合条件的元素
@Test
public void textSkip() {
Flux.just(10, 1, 2, 9, 8).skipUntil(n -> n < 7).subscribe(System.out::println);
}
output
1
2
9
8
与skip相对应,take相关的操作符主要包括take,takeWhile,takeUntil,takeLast
仅获取前n个元素,如果n超过元素个数,则以元素个数为准
@Test
public void textTake() {
Flux.range(1, 10).take(3).subscribe(System.out::println);
}
output
1
2
3
仅获取后n个元素
@Test
public void textTake() {
Flux.range(1, 10).takeLast(3).subscribe(System.out::println);
}
output
8
9
10
仅获取前n元素都符合predicate条件的元素,直到出现第一个不符合条件的元素
@Test
public void textTake() {
Flux.range(1, 10).takeWhile(n -> n < 7).subscribe(System.out::println);
}
output
1
2
3
4
5
6
仅获取前n元素都不符合predicate条件的元素,直到出现第一个符合条件的元素(注意,这个符合要求的元素同样会被获取到)
@Test
public void textTake() {
Flux.just(10, 9, 1, 8).takeUntil(n -> n < 7).subscribe(System.out::println);
}
output
10
9
1