├── .github
├── dependabot.yml
└── workflows
│ └── ci.yml
├── .gitignore
├── LICENSE
├── README.md
├── generate-site.sh
├── pom.xml
└── src
├── docs
├── collectStats.png
├── collectStats.svg
├── collectWhile.png
├── doOnEmpty.png
├── doOnEmpty.svg
├── eclipse-junit.png
├── fetchPagesByRequest.png
├── fetchPagesByRequest.svg
├── file-queue.png
├── file-queue.svg
├── ignoreElementsThen.png
├── ignoreElementsThen.svg
├── mapLast.png
├── mapLast.svg
├── mapWithIndex.png
├── mapWithIndex.svg
├── match.png
├── match.svg
├── maxRequest.png
├── maxRequest.svg
├── mergeInterleaved.png
├── minRequest.png
├── minRequest.svg
├── onBackpressureBufferToFile.png
├── onBackpressureBufferToFile.svg
├── orderedMerge.png
├── orderedMerge.svg
├── rebatchRequests.png
├── rebatchRequests.svg
├── repeatLast.png
├── repeatLast.svg
├── reverse.png
├── reverse.svg
├── stateMachine.png
├── stateMachine.svg
├── toListWhile.png
├── toListWhile.svg
├── windowMinMax.png
└── windowMinMax.svg
├── main
├── java
│ └── com
│ │ └── github
│ │ └── davidmoten
│ │ ├── rx2
│ │ ├── Actions.java
│ │ ├── BiFunctions.java
│ │ ├── BiPredicates.java
│ │ ├── Bytes.java
│ │ ├── Callables.java
│ │ ├── Consumers.java
│ │ ├── Flowables.java
│ │ ├── Functions.java
│ │ ├── IO.java
│ │ ├── Maybes.java
│ │ ├── Observables.java
│ │ ├── Predicates.java
│ │ ├── RetryWhen.java
│ │ ├── SchedulerHelper.java
│ │ ├── StateMachine.java
│ │ ├── StateMachine2.java
│ │ ├── Statistics.java
│ │ ├── Strings.java
│ │ ├── buffertofile
│ │ │ ├── DataSerializer.java
│ │ │ ├── Options.java
│ │ │ ├── Serializer.java
│ │ │ ├── SerializerString.java
│ │ │ └── Serializers.java
│ │ ├── exceptions
│ │ │ ├── AssertionException.java
│ │ │ └── ThrowingException.java
│ │ ├── flowable
│ │ │ ├── Burst.java
│ │ │ ├── CachedFlowable.java
│ │ │ ├── CloseableFlowableWithReset.java
│ │ │ ├── Serialized.java
│ │ │ └── Transformers.java
│ │ ├── functions
│ │ │ └── Consumer3.java
│ │ ├── internal
│ │ │ ├── SchedulerWithId.java
│ │ │ ├── flowable
│ │ │ │ ├── DelimitedStringLinkedList.java
│ │ │ │ ├── FlowableCollectWhile.java
│ │ │ │ ├── FlowableDoOnEmpty.java
│ │ │ │ ├── FlowableFetchPagesByRequest.java
│ │ │ │ ├── FlowableInsertMaybe.java
│ │ │ │ ├── FlowableInsertTimeout.java
│ │ │ │ ├── FlowableMapLast.java
│ │ │ │ ├── FlowableMatch.java
│ │ │ │ ├── FlowableMaxRequest.java
│ │ │ │ ├── FlowableMergeInterleave.java
│ │ │ │ ├── FlowableMinRequest.java
│ │ │ │ ├── FlowableRepeat.java
│ │ │ │ ├── FlowableRepeatingTransform.java
│ │ │ │ ├── FlowableReverse.java
│ │ │ │ ├── FlowableServerSocket.java
│ │ │ │ ├── FlowableStateMachine.java
│ │ │ │ ├── FlowableStringInputStream.java
│ │ │ │ ├── FlowableStringSplitSimple.java
│ │ │ │ ├── FlowableWindowMinMax.java
│ │ │ │ ├── OnSubscribeCacheResettable.java
│ │ │ │ ├── TransformerDecode.java
│ │ │ │ ├── TransformerStateMachine.java
│ │ │ │ ├── TransformerStringSplit.java
│ │ │ │ └── buffertofile
│ │ │ │ │ ├── FlowableOnBackpressureBufferToFile.java
│ │ │ │ │ ├── MemoryMappedFile.java
│ │ │ │ │ ├── Page.java
│ │ │ │ │ ├── PagedQueue.java
│ │ │ │ │ ├── Pages.java
│ │ │ │ │ ├── SerializerBytes.java
│ │ │ │ │ ├── SerializerJavaIO.java
│ │ │ │ │ └── UnsafeAccess.java
│ │ │ └── observable
│ │ │ │ └── OnSubscribeCacheResetable.java
│ │ ├── observable
│ │ │ ├── CachedObservable.java
│ │ │ ├── CloseableObservableWithReset.java
│ │ │ └── Transformers.java
│ │ └── util
│ │ │ ├── Pair.java
│ │ │ └── ZippedEntry.java
│ │ └── util
│ │ └── RingBuffer.java
└── proguard
│ └── proguard-rules.txt
└── test
├── java
└── com
│ └── github
│ └── davidmoten
│ ├── rx2
│ ├── ActionsTest.java
│ ├── Benchmarks.java
│ ├── BiFunctionsTest.java
│ ├── BiPredicatesTest.java
│ ├── BytesTest.java
│ ├── CallablesTest.java
│ ├── ConsumersTest.java
│ ├── FlowablesTest.java
│ ├── FunctionsTest.java
│ ├── MaybesTest.java
│ ├── ObservablesTest.java
│ ├── PredicatesTest.java
│ ├── RetryWhenTest.java
│ ├── SchedulerHelperTest.java
│ ├── SpecializedMpscLinkedQueue.java
│ ├── SpecializedMspcLinkedQueueTest.java
│ ├── StateMachineTest.java
│ ├── StringsSplitTest.java
│ ├── StringsTest.java
│ ├── buffertofile
│ │ ├── FlowableOnBackpressureBufferToFileTest.java
│ │ └── SerializersTest.java
│ ├── flowable
│ │ ├── FlowableDoNothing.java
│ │ ├── SerializedTest.java
│ │ └── TransformersTest.java
│ ├── internal
│ │ └── flowable
│ │ │ ├── DelimitedStringLinkedListTest.java
│ │ │ ├── FlowableCollectWhileTest.java
│ │ │ ├── FlowableDoOnEmptyTest.java
│ │ │ ├── FlowableFetchPagesByRequestTest.java
│ │ │ ├── FlowableMapLastTest.java
│ │ │ ├── FlowableMatchTest.java
│ │ │ ├── FlowableMaxRequestTest.java
│ │ │ ├── FlowableMergeInterleavedTest.java
│ │ │ ├── FlowableMinRequestTest.java
│ │ │ ├── FlowablePassThroughTest.java
│ │ │ ├── FlowableRepeatingTest.java
│ │ │ ├── FlowableRepeatingTransformTest.java
│ │ │ ├── FlowableReverseTest.java
│ │ │ ├── FlowableServerSocketTest.java
│ │ │ ├── FlowableStateMachineTest.java
│ │ │ ├── FlowableStringInputStreamTest.java
│ │ │ ├── FlowableWindowMinMaxTest.java
│ │ │ ├── SerializerJavaIOTest.java
│ │ │ ├── TransformerDecodeTest.java
│ │ │ ├── TransformerStringSplitTest.java
│ │ │ └── buffertofile
│ │ │ ├── MemoryMappedFileTest.java
│ │ │ ├── PageListTest.java
│ │ │ ├── PageTest.java
│ │ │ └── UnsafeAccessTest.java
│ ├── observable
│ │ └── TransformersTest.java
│ └── util
│ │ └── PairTest.java
│ └── util
│ └── RingBufferTest.java
└── resources
├── test.zip
├── test2.txt
├── test3.txt
└── test4.txt
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for all configuration options:
4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5 |
6 | version: 2
7 | updates:
8 | - package-ecosystem: "maven" # See documentation for possible values
9 | directory: "/" # Location of package manifests
10 | schedule:
11 | interval: "daily"
12 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: ci
2 |
3 | on: [push, pull_request]
4 |
5 | jobs:
6 | build:
7 | uses: davidmoten/workflows/.github/workflows/ci.yml@master
8 | with:
9 | jdk-matrix: '[ "8"]'
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | pom.xml.tag
3 | pom.xml.releaseBackup
4 | pom.xml.versionsBackup
5 | pom.xml.next
6 | release.properties
7 | dependency-reduced-pom.xml
8 | buildNumber.properties
9 | .mvn/timing.properties
10 | .project
11 | .classpath
12 | .settings
13 | /.idea/
14 | *.iml
--------------------------------------------------------------------------------
/generate-site.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 | mvn site
4 | cd ../davidmoten.github.io
5 | git pull
6 | mkdir -p rxjava2-extras
7 | cp -r ../rxjava2-extras/target/site/* rxjava2-extras/
8 | git add .
9 | git commit -am "update site reports"
10 | git push
11 |
--------------------------------------------------------------------------------
/src/docs/collectStats.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/collectStats.png
--------------------------------------------------------------------------------
/src/docs/collectWhile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/collectWhile.png
--------------------------------------------------------------------------------
/src/docs/doOnEmpty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/doOnEmpty.png
--------------------------------------------------------------------------------
/src/docs/eclipse-junit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/eclipse-junit.png
--------------------------------------------------------------------------------
/src/docs/fetchPagesByRequest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/fetchPagesByRequest.png
--------------------------------------------------------------------------------
/src/docs/file-queue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/file-queue.png
--------------------------------------------------------------------------------
/src/docs/ignoreElementsThen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/ignoreElementsThen.png
--------------------------------------------------------------------------------
/src/docs/mapLast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/mapLast.png
--------------------------------------------------------------------------------
/src/docs/mapWithIndex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/mapWithIndex.png
--------------------------------------------------------------------------------
/src/docs/match.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/match.png
--------------------------------------------------------------------------------
/src/docs/maxRequest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/maxRequest.png
--------------------------------------------------------------------------------
/src/docs/mergeInterleaved.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/mergeInterleaved.png
--------------------------------------------------------------------------------
/src/docs/minRequest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/minRequest.png
--------------------------------------------------------------------------------
/src/docs/onBackpressureBufferToFile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/onBackpressureBufferToFile.png
--------------------------------------------------------------------------------
/src/docs/orderedMerge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/orderedMerge.png
--------------------------------------------------------------------------------
/src/docs/rebatchRequests.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/rebatchRequests.png
--------------------------------------------------------------------------------
/src/docs/repeatLast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/repeatLast.png
--------------------------------------------------------------------------------
/src/docs/reverse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/reverse.png
--------------------------------------------------------------------------------
/src/docs/stateMachine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/stateMachine.png
--------------------------------------------------------------------------------
/src/docs/toListWhile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/toListWhile.png
--------------------------------------------------------------------------------
/src/docs/windowMinMax.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/davidmoten/rxjava2-extras/f108c2792078c26dafac27921c208f8374911b49/src/docs/windowMinMax.png
--------------------------------------------------------------------------------
/src/main/java/com/github/davidmoten/rx2/Actions.java:
--------------------------------------------------------------------------------
1 | package com.github.davidmoten.rx2;
2 |
3 | import java.util.concurrent.atomic.AtomicBoolean;
4 | import java.util.concurrent.atomic.AtomicInteger;
5 |
6 | import io.reactivex.functions.Action;
7 |
8 | public final class Actions {
9 |
10 | private Actions() {
11 | // prevent instantiation
12 | }
13 |
14 | public static Action setToTrue(final AtomicBoolean b) {
15 | return new Action() {
16 |
17 | @Override
18 | public void run() throws Exception {
19 | b.set(true);
20 | }
21 |
22 | };
23 | }
24 |
25 | public static Action throwing(final Exception e) {
26 | return new Action() {
27 |
28 | @Override
29 | public void run() throws Exception {
30 | throw e;
31 | }
32 |
33 | };
34 | }
35 |
36 | public static Action doNothing() {
37 | return DoNothingHolder.DO_NOTHING;
38 | }
39 |
40 | private static final class DoNothingHolder {
41 | static final Action DO_NOTHING = new Action() {
42 | @Override
43 | public void run() throws Exception {
44 | // do nothing!
45 | }
46 | };
47 | }
48 |
49 | public static Action increment(final AtomicInteger x) {
50 | //TODO make holder
51 | return new Action() {
52 |
53 | @Override
54 | public void run() throws Exception {
55 | x.incrementAndGet();
56 | }
57 | };
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/com/github/davidmoten/rx2/BiFunctions.java:
--------------------------------------------------------------------------------
1 | package com.github.davidmoten.rx2;
2 |
3 | import com.github.davidmoten.rx2.exceptions.ThrowingException;
4 |
5 | import io.reactivex.functions.BiFunction;
6 |
7 | public final class BiFunctions {
8 |
9 | private BiFunctions() {
10 | // prevent instantiation
11 | }
12 |
13 | @SuppressWarnings("unchecked")
14 | public static BiFunction throwing() {
15 | return (BiFunction) ThrowingHolder.INSTANCE;
16 | }
17 |
18 | private static final class ThrowingHolder {
19 | static BiFunction