Is it possible to get the first element from flux without converting flux into stream?
Asked
Active
Viewed 2.7k times
3 Answers
24
Alternatively to take(1), if you need a Mono<T> that represents the first element of the Flux<T> you can use .next().
Or if you need the i-th element, use .elementAt(i) (must be sure that such an element exists though, unlike take and next which just return an empty publisher if not enough elements).
Simon Baslé
- 27,105
- 5
- 69
- 70
-
1Thanks @Simon for you reply. I idea here is to sort the Flux first and then get the first element. After seeing the docs I can achieve the same by using reduce on the flux as below. Flux.just(1, 2, 3) .reduce((o1, o2) -> { if (o1 - o2 < 0) { return o1; } return o2; }) – akreddy.21 Mar 07 '19 at 06:18
4
Flux.range(1,10).take(1) should do the trick (the range(...) part here is only to emit some sample values; if you blockFirst() or subscribe() to the stream, you should see '1')
Mikhail Kholodkov
- 23,642
- 17
- 61
- 78
Frischling
- 2,100
- 14
- 34
0
Also the easiest: you can convert your Flux to Mono using Mono.from()
Mono<T> mono = Mono.from(flux);
It takes the first element of flux or completes with empty if flux has not emitted any element.
kerbermeister
- 2,985
- 3
- 11
- 30