Rx通过链接它们而不是嵌套它们,具有应用运算符的特定样式。此样式并不罕见,这对于不可变对象更有意义,甚至可以在标准Java特性中找到它,例如字符串:String s = new String(“Hi”).toLowerCase().replace('a','c');此样式允许您按照应用顺序查看修改,并且在使用大量运算符时它也看起来更整洁。

理想情况下,您希望您的Rx运算符与其他运算符一样适合链:

许多语言都有支持这种方法的方法。不方便的是,Java没有。您必须编辑Observable本身才能添加自己的方法。没有必要要求RxJava团队将您的想法添加到操作集中,因为已经有这么多,RxJava团队对于添加另一个操作符是保守的。你可以扩展Observable并在那里添加你自己的运算符。在这种情况下,您将无法再共享和组合运算符库。

有一种方法可以使用compose方法将自定义操作符拟合到链中。

啊哈!Transformer(变形金刚)接口!Transformer <T,R>实际上只是Func1 <Observable <T>,Observable <R >>接口的别名。这是一个采用Observable <T>并返回Observable <R>的方法,就像我们为计算运行平均值所做的那样。

Java不允许您仅通过名称引用函数,因此我们假设自定义运算符在我们的Main类中。我们可以看到,现在我们的操作完全适合链条,尽管首先调用compose的样板。为了更好的封装,您应该在一个新类中实现Observable.Transformer,并将整个实现与其辅助类一起移出视线。

我们就像这样使用它

大多数Rx运算符都是可参数化的。我们也可以这样做。让我们扩展运算符的功能,可以忽略超过某个阈值的值。

我们刚刚将参数作为字段添加到运算符中,为我们覆盖的用途添加了构造函数,并在我们的Rx操作中使用了该参数。现在我们可以做source.compose(new RunningAverage(5)),理想情况下,我们将调用source.runningAverage(5)。Rx是一个功能范例,但Java仍然主要是面向对象的语言,并且相当保守。

您可以在此处获取此示例运算符的完整示例(here)。

下节再续!

原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part%203%20-%20Taming%20the%20sequence/7.%20Custom%20operators.md

有什么讨论的内容,可以加我公众号:

compose RxJava笔记相关推荐

  1. Compose 学习笔记(一)—— Compose 初探

    历时两年,Android 团队推出了全新的原生 Android 界面 UI 库--Compose.当然,Compose 也是属于 Jetpack 工具库中的一部分,官方宣称可以简化并加快 Androi ...

  2. Compose学习笔记1-compose、state、flow、remember

    新建一个 compose 项目 开始前,请下载最新版本的 Android Studio Arctic Fox,然后使用 Empty Compose Activity 模板创建应用. 我们先看看在 ap ...

  3. Jetpack Compose学习笔记

    在前不久的 Android Dev Summit '19 上,Jetpack Compose 终于发布了一个可直接获得的预览版.现在的版本还是 0.1.0-dev02,处于非常早期的版本,官方也再三强 ...

  4. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  5. RxJava响应式编程学习笔记

    1.概述 RxJava是一个著名的开源库,是ReactiveX(Reactive Extensions)的一种java实现.ReactiveX是一种响应式扩展框架,有很多实现,如RxAndroid,R ...

  6. torchvision 笔记:transforms.Compose()

    torchvision.transforms.Compose()类的主要作用是串联多个transforms列表里面的transform操作 比如,在torchvision 笔记:transforms. ...

  7. Java中expecial,RxJava 学习笔记 (一)

    作者: 一字马胡 转载标志 [2017-12-13] 更新日志 日期 更新内容 备注 2017-12-13 RxJava学习笔记系列 系列笔记 (一) 2017-12-15 增加系列笔记(二) 201 ...

  8. RxJava 学习笔记(八) --- Combining 结合操作

    @(Rxjava学习笔记) RxJava 学习笔记(八) - Combining 结合操作 RxJava 学习笔记八 Combining 结合操作 StartWith 在数据序列的开头插入一条指定的项 ...

  9. docker 及docker compose笔记

    Docker hub: usr:yuyixiong pw: yuyixiong email: 900925.com hub 查看 :https://www.runoob.com/docker/dock ...

最新文章

  1. taro 打包微信小程序运行失败(一)
  2. python语言中文社区-python解决中文
  3. C++继承中父类和子类之间的同名覆盖
  4. 网络流 24 题汇总(LOJ 上只有 22 题???)
  5. Java实现文件上传-按钮弹出上传页面
  6. 文件处理之解决使用 feof(c语言)或(fin.eof())出现多读问题
  7. C语言 链表拼接 PTA,PTA实验 链表拼接 (20point(s))
  8. 关于如何在Python中使用静态、类或抽象方法的权威指南
  9. 【无删减】Python老司机收藏夹的17个国外免费学习网站
  10. python vbs库_Python语言之requests库
  11. 修改map.html,HTML map 标签 | 菜鸟教程
  12. usb设备由生产到使用 java 114979888
  13. 数据清洗Chap4——dataframe操作
  14. Vs2010 破解 序列号
  15. 章节1 计算机体系结构
  16. Java将域名转换成IP
  17. 算法 树7 二叉搜索树的操作集
  18. 中南大学青年志愿者协会电脑维修部
  19. 校验码 - 奇偶校验
  20. 为什么手机网速太慢_为什么手机网速很慢;为什么手机信号满格,网速却很慢?...

热门文章

  1. [转载] python 列表List中index函数的坑
  2. [转载] pip快速下载python包
  3. [转载] 康威的人生游戏与轻量级模式
  4. [转载] Python全栈(1)—— Python如何快速下载库与jupyter notebook 的基本使用
  5. 第二周四则运算汇报及总结
  6. scala编程第16章学习笔记(3)——List类的高阶方法
  7. PS中的Workflow的创建
  8. UVa 10066 - The Twin Towers(LCS水题)
  9. sql2005安装过程,(不装C盘)
  10. AngularJS Slider指令(directive)扩展