前言
RxJava不仅提供了大量的操作,例如map、flatMap(相关博客),还支持自定义操作符。
官方文档给出了自定义操作符的相关建议:
如果操作符是用于Observable发射的单独的数据项,则使用序列化操作符ObservableOperator。
如果你的操作符是用于变换Observable发射的整个数据序列,则使用变换操作符ObservableTransformer。
自定义序列化操作符
最近项目中有了这样一个需求:从后台获取了原始数据DataA,在前端加工处理后成DataB提交给后台。项目中大量地方使用了这个方法,刚开始是使用了一个Utils进行数据转换。但是我发现项目中的网络请求都是使用RxJava实现的。那么RxJava中有没有什么优雅的实现数据转换呢?我首先想到的是map操作符,但是每次使用map还要传入转换逻辑,真的很麻烦。而序列化操作符干好可以完美的实现我们的要求。接下来我们就通过一个简单的例子来看如何自定义序列化操作符。
假设存在一个这样的User的实例,我们要从中获取到它的name
class User {
private String name;
private List book;
}
这是个伪需求啊,我们完全可以使用map操作符实现这个功能:
map(new Function() {
@Override
public String apply(User user) throws Throwable {
return user.getName();
}
})
但这中方法每次都要写一遍转