{"id":13803908,"url":"https://github.com/pakoito/RxComprehensions","last_synced_at":"2025-05-13T17:30:41.101Z","repository":{"id":139227802,"uuid":"66866914","full_name":"pakoito/RxComprehensions","owner":"pakoito","description":"Reduce boilerplate in RxJava by abstracting chained operators like flatMap, concatMap, switchMap, or compose [STABLE]","archived":false,"fork":false,"pushed_at":"2017-02-24T12:44:23.000Z","size":104,"stargazers_count":85,"open_issues_count":0,"forks_count":1,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-15T23:50:45.678Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pakoito.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-08-29T17:54:09.000Z","updated_at":"2024-09-23T11:11:46.000Z","dependencies_parsed_at":"2024-01-03T01:30:30.823Z","dependency_job_id":null,"html_url":"https://github.com/pakoito/RxComprehensions","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pakoito%2FRxComprehensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pakoito%2FRxComprehensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pakoito%2FRxComprehensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pakoito%2FRxComprehensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pakoito","download_url":"https://codeload.github.com/pakoito/RxComprehensions/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225247784,"owners_count":17444111,"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":[],"created_at":"2024-08-04T01:00:38.990Z","updated_at":"2024-11-18T20:31:14.792Z","avatar_url":"https://github.com/pakoito.png","language":"Java","readme":"# RxComprehensions\n\nRxComprehensions is a library to reduce boilerplate and simplify your `Observable` chains.\n\n## Rationale\n\nAs your code starts getting more and more functional, you find that you have to chain multiple `Observable` by means of `flatMap()`, `concatMap()`, or `switchMap()`. This causes indentation levels to go quite high, and would often require that you split the code in several methods just to keep it readable.\n\n```java\nObservable\u003cString\u003e getUserFriends =\n    profileClicks()\n            .flatMap { position -\u003e\n                getUserFromProfile(position)\n                        .flatMap { user -\u003e\n                            requestFriendListForUser(position, user.id)\n                                    .flatMap { friends -\u003e\n                                        storeUserAndFriends(user, friends)\n                                                .flatMap { result -\u003e\n                                                    toUserDisplayString(position, user, friends, result)\n                                                }\n                                    }\n                        }\n            }\n```\n\n**Comprehensions** are a language feature that allow you to define such a chain in a way where every observable is a function at topmost indentation, yet still contains all the parameters received in the previous functions.\n\n## Usage\n\n### Map comprehensions\n\nRxComprehensions contains static methods `doFlatMap()` for `flatMap()`, `doConcatMap()` for `concatMap()`, `doSwitchMap()` for `switchMap()`. Each takes from 1 to 9 `FuncN` each with an increasing number of parameters, and returns an `Observable` of the type of the return of the last function.\n\n```java\nObservable\u003cString\u003e getUserFriends =\n    // chained with flatMap()\n    RxComprehensions.doFlatMap(\n        () -\u003e profileClicks(),\n        position -\u003e getUserFromProfile(position),\n        position, user -\u003e requestFriendListForUser(position, user.id),\n        position, user, friends -\u003e storeUserAndFriends(user, friends),\n        position, user, friends, result -\u003e toUserDisplayString(position, user, friends, result)\n    );\n```\n\n### Compose comprehensions\n\nRxComprehensions contains static methods `doCompose()` for `compose()`. Each takes from 1 to 9 `Transformer\u003cT, U\u003e` (RxJava 1.X) or `ObservableTransformer\u003cT, U\u003e` (RxJava 2.X), and returns an `Observable` of the type of the return of the last one.\n\n```java\nObservable\u003cList\u003cSiblings\u003e\u003e getRelatives =\n    // chained with compose()\n    RxComprehensions.doCompose(\n        () -\u003e requestRelative(\"12345\"),\n        validate(),\n        assureThreads(Schedulers.io(), AndroidSchedulers.main()),\n        respectLifecycle(activity),\n        toUILayerModel(),\n        groupSiblings()\n    );\n\nObservable\u003cRelativeDto\u003e requestRelative(String id) { /* ... */ }\n\nObservableTransformer\u003cRelativeDto, RelativeDto\u003e validate() { /* ... */ }\n\nObservableTransformer\u003cRelativeDto, RelativeDto\u003e assureThreads(Scheduler in, Scheduler out) { /* ... */ }\n\nObservableTransformer\u003cRelativeDto, RelativeDto\u003e respectLifecycle(Activity activity) { /* ... */ }\n\nObservableTransformer\u003cRelativeDto, Relative\u003e toUILayerModel() { /* ... */ }\n\nObservableTransformer\u003cRelative, List\u003cSiblings\u003e\u003e groupSiblings() { /* ... */ }\n```\n\n## Distribution\n\n### RxJava 1.X\n\nAdd as a dependency to your `build.gradle`\n```groovy\nrepositories {\n    ...\n    maven { url \"https://jitpack.io\" }\n    ...\n}\n    \ndependencies {\n    ...\n    compile 'com.github.pakoito.RxComprehensions:rxcomprehensions:1.3.0'\n    ...\n}\n```\nor to your `pom.xml`\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003ejitpack.io\u003c/id\u003e\n        \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.pakoito.RxComprehensions\u003c/groupId\u003e\n    \u003cartifactId\u003erxcomprehensions\u003c/artifactId\u003e\n    \u003cversion\u003e1.3.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### RxJava 2.X\n\nAdd as a dependency to your `build.gradle`\n```groovy\nrepositories {\n    ...\n    maven { url \"https://jitpack.io\" }\n    ...\n}\n    \ndependencies {\n    ...\n    compile 'com.github.pakoito.RxComprehensions:rxcomprehensions2:1.3.0'\n    ...\n}\n```\nor to your `pom.xml`\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003ejitpack.io\u003c/id\u003e\n        \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.pakoito.RxComprehensions\u003c/groupId\u003e\n    \u003cartifactId\u003erxcomprehensions2\u003c/artifactId\u003e\n    \u003cversion\u003e1.3.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## License\n\nCopyright (c) pakoito 2016\n\nThe Apache Software License, Version 2.0\n\nSee LICENSE.md\n","funding_links":[],"categories":["Utilities"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpakoito%2FRxComprehensions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpakoito%2FRxComprehensions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpakoito%2FRxComprehensions/lists"}