{"id":16838854,"url":"https://github.com/akarnokd/rxjavajdk8interop","last_synced_at":"2025-06-23T03:35:27.866Z","repository":{"id":144517837,"uuid":"75467942","full_name":"akarnokd/RxJavaJdk8Interop","owner":"akarnokd","description":"RxJava 2/3 interop library for supporting Java 8 features such as Optional, Stream and CompletableFuture [discontinued]","archived":false,"fork":false,"pushed_at":"2020-01-01T08:09:44.000Z","size":547,"stargazers_count":71,"open_issues_count":0,"forks_count":6,"subscribers_count":5,"default_branch":"3.x","last_synced_at":"2025-03-18T08:21:29.986Z","etag":null,"topics":["completablefuture","completionstage","extensions","java-streams","reactive-streams","rxjava","stream"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akarnokd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-03T10:45:59.000Z","updated_at":"2024-03-31T14:18:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"a5dfd5af-07a2-4a22-b0b9-a1f56aee3578","html_url":"https://github.com/akarnokd/RxJavaJdk8Interop","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akarnokd%2FRxJavaJdk8Interop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akarnokd%2FRxJavaJdk8Interop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akarnokd%2FRxJavaJdk8Interop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akarnokd%2FRxJavaJdk8Interop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akarnokd","download_url":"https://codeload.github.com/akarnokd/RxJavaJdk8Interop/tar.gz/refs/heads/3.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244912800,"owners_count":20530764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["completablefuture","completionstage","extensions","java-streams","reactive-streams","rxjava","stream"],"created_at":"2024-10-13T12:26:48.207Z","updated_at":"2025-03-22T05:30:48.601Z","avatar_url":"https://github.com/akarnokd.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RxJavaJdk8Interop\n\n## :warning: Discontinued\n\nThe features of this library (and more) have been integrated into *RxJava 3* proper starting with version **3.0.0-RC7**.\n\n----------\n\n\u003ca href='https://travis-ci.org/akarnokd/RxJavaJdk8Interop/builds'\u003e\u003cimg src='https://travis-ci.org/akarnokd/RxJavaJdk8Interop.svg?branch=3.x'\u003e\u003c/a\u003e\n[![codecov.io](http://codecov.io/github/akarnokd/RxJavaJdk8Interop/coverage.svg?branch=3.x)](http://codecov.io/github/akarnokd/RxJavaJdk8Interop?branch=3.x)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.akarnokd/rxjava3-jdk8-interop/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.akarnokd/rxjava3-jdk8-interop)\n\nRxJava 3.x: [![RxJava 3.x](https://maven-badges.herokuapp.com/maven-central/io.reactivex.rxjava3/rxjava/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.reactivex.rxjava3/rxjava)\n\nRxJava 3 interop library for supporting Java 8 features such as Optional, Stream and CompletableFuture.\n\n# Release\n\n### RxJava 3\n\n```groovy\ncompile 'com.github.akarnokd:rxjava3-jdk8-interop:3.0.0-RC6'\n```\n\n### [RxJava 2](https://github.com/akarnokd/RxJavaJdk8Interop/tree/master)\n\n```groovy\ncompile 'com.github.akarnokd:rxjava2-jdk8-interop:0.3.7'\n```\n\n# Examples\n\nJavadocs: [https://akarnokd.github.com/RxJavaJdk8Interop/javadoc/index.html](https://akarnokd.github.com/RxJavaJdk8Interop/javadoc/index.html)\n\nThe main entry points are:\n\n  - `FlowableInterop`\n  - `ObservableInterop`\n  - `SingleInterop`\n  - `MaybeInterop`\n  - `CompletableInterop`\n\n## Stream to RxJava\n\nNote that `java.util.stream.Stream` can be consumed at most once and only\nsynchronously.\n\n```java\nStream\u003cT\u003e stream = ...\n\nFlowable\u003cT\u003e flow = FlowableInterop.fromStream(stream);\n\nObservable\u003cT\u003e obs = ObservableInterop.fromStream(stream);\n```\n\n## Optional to RxJava\n\n```java\nOptional\u003cT\u003e opt = ...\n\nFlowable\u003cT\u003e flow = FlowableInterop.fromOptional(opt);\n\nObservable\u003cT\u003e obs = ObservableInterop.fromOptional(opt);\n```\n\n## CompletionStage to RxJava\n\nNote that cancelling the Subscription won't cancel the `CompletionStage`.\n\n```java\nCompletionStage\u003cT\u003e cs = ...\n\nFlowable\u003cT\u003e flow = FlowableInterop.fromFuture(cs);\n\nObservable\u003cT\u003e flow = ObservableInterop.fromFuture(cs);\n```\n\n## Using Stream Collectors\n\n```java\nFlowable.range(1, 10)\n.compose(FlowableInterop.collect(Collectors.toList()))\n.test()\n.assertResult(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));\n```\n\n## Return the first/single/last element as a CompletionStage\n\n```java\nCompletionStage\u003cInteger\u003e cs = Flowable.just(1)\n.delay(1, TimeUnit.SECONDS)\n// return first\n.to(FlowableInterop.first());\n\n// return single\n// .to(FlowableInterop.single());\n\n// return last\n// .to(FlowableInterop.last());\n\ncs.whenComplete((v, e) -\u003e {\n   System.out.println(v);\n   System.out.println(e);\n});\n```\n\n## Return the only element as a CompletionStage\n\n### Single\n\n```java\nCompletionStage\u003cInteger\u003e cs = Single.just(1)\n.delay(1, TimeUnit.SECONDS)\n.to(SingleInterop.get());\n\ncs.whenComplete((v, e) -\u003e {\n   System.out.println(v);\n   System.out.println(e);\n});\n```\n\n### Maybe\n\n```java\nCompletionStage\u003cInteger\u003e cs = Maybe.just(1)\n.delay(1, TimeUnit.SECONDS)\n.to(MaybeInterop.get());\n\ncs.whenComplete((v, e) -\u003e {\n   System.out.println(v);\n   System.out.println(e);\n});\n```\n\n## Await completion as CompletionStage\n\n### Completable\n\n```java\nCompletionStage\u003cVoid\u003e cs = Completable.complete()\n.delay(1, TimeUnit.SECONDS)\n.to(CompletableInterop.await());\n\ncs.whenComplete((v, e) -\u003e {\n   System.out.println(v);\n   System.out.println(e);\n});\n```\n\n## Return the first/last element optionally\n\nThis is a blocking operation\n\n```java\nOptional\u003cInteger\u003e opt = Flowable.just(1)\n.to(FlowableInterop.firstElement());\n\nSystem.out.println(opt.map(v -\u003e v + 1).orElse(-1));\n```\n\n## Convert to Java Stream\n\nThis is a blocking operation. Closing the stream will cancel the RxJava sequence.\n\n```java\nFlowable.range(1, 10)\n.to(FlowableInterop.toStream())\n.parallel()\n.map(v -\u003e v + 1)\n.forEach(System.out::println);\n```\n\n## FlatMap Java Streams\n\nNote that since consuming a stream is practically blocking, there is no need\nfor a `maxConcurrency` parameter.\n\n```java\n\nFlowable.range(1, 5)\n.compose(FlowableInterop.flatMapStream(v -\u003e Arrays.asList(v, v + 1).stream()))\n.test()\n.assertResult(1, 2, 2, 3, 3, 4, 4, 5, 5, 6);\n```\n\n## Map based on Java Optional\n\n```java\nFlowable.range(1, 5)\n.compose(FlowableInterop.mapOptional(v -\u003e v % 2 == 0 ? Optional.of(v) : Optional.empty()))\n.test()\n.assertResult(2, 4);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakarnokd%2Frxjavajdk8interop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakarnokd%2Frxjavajdk8interop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakarnokd%2Frxjavajdk8interop/lists"}