What's Changed
Implementation
- 4.x: Streamable + blockingLast + ignoreElements by @akarnokd in #8231
- 4.x: Streamable + repeat, repeatWhen, retry, retryWhen by @akarnokd in #8232
- 4.x: Streamable, improved range and collect internals + JMH by @akarnokd in #8235
- 4.x: Streamable - optimize several operator internals by @akarnokd in #8238
- 4.x: Streamable Operator optimizations 7/18 by @akarnokd in #8239
- 4.x: Streamable mapOptional +perf by @akarnokd in #8240
Dependabot
- chore(deps): bump jupiterLauncherVersion from 6.1.1 to 6.1.2 by @dependabot[bot] in #8233
- chore(deps): bump org.junit.jupiter:junit-jupiter from 6.1.1 to 6.1.2 by @dependabot[bot] in #8234
- chore(deps): bump github/codeql-action/upload-sarif from 4.37.0 to 4.37.1 by @dependabot[bot] in #8236
- chore(deps): bump actions/setup-java from 5.5.0 to 5.6.0 by @dependabot[bot] in #8237
- chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 by @dependabot[bot] in #8241
- chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in #8242
Streamable Scrabble
Ongoing measure/optimization. Managed to shave over half the time off (but some came from using better collector implementations for sure).
💻 i9 275HX, 32GB LPDDR5 6400MT CL52, Windows 25H2, JDK 26.0.1
| Step | Time (ms) | Improvement | vs Baseline |
|---|---|---|---|
| Baseline | 42,5119 | - | - |
Avoid whenComplete usage in collect
| 37,566 | -11,65% | - |
IndexableSource in collect
| 35,815 | -4,66% | -15,77% |
| concatIterable optimizations | 31,971 | -10,73% | -24,81% |
| map fusions | 30,623 | -4,22% | -27,98% |
| flattenAsFlowable deferred opt | 27,999 | -8,57% | -34,15% |
| MutableLong in the bench | 26,159 | -6,57% | -38,48% |
| lastOrError opt | 25,164 | -3,80% | -40,82% |
custom Collector summers
| 24,885 | -1,11% | -41,47% |
| skip optimizations | 24,791 | -0,38% | -41,69% |
| filter opt, filter+map fusion, lastOrError opt | 23,566 | -4,94% | -44,58% |
| slow path collect optimization | 22,392 | -4,98% | -47,34% |
| CharStreamer EnumerableSource marker | 21,843 | -2,45% | -48,63% |
| custom max collector | 20,369 | -6,75% | -52,09% |
Versus the other techs
| Tech | Time in milliseconds |
|---|---|
| For Loop JDK 26 | 2,125 |
| IObservable synchronous | 7,917 |
| IEnumerable port | 8,225 |
| Ix 1.0.0 | 8,463 |
| RxJava Observable 3.1.12 | 10,119 |
| RxJava Observable 4a19 ◀️ | 10,484 |
| RxJava Observable 2.2.21 | 10,612 |
| RxJava Flowable 4a19 | 11,424 |
| RxJava Flowable 3.1.12 | 12,499 |
| RxJava Flowable 2.2.21 | 13,849 |
| Reactive4Java 0.98.1 | 13,086 |
| Guava 33.6.0 | 12,564 |
| Reactor 3.8.6 | 14,158 |
| CyclopsReactOpt | 17,273 |
| 🆕 RxJava Streamable 4a20 ◀️ | 20,369 |
| JOOL 0.9.15 | 38,876 |
| RxJava Streamable 4a19 ◀️ | 42,512 |
Full Changelog: v4.0.0-alpha-19...v4.0.0-alpha-20