Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava1和RxJava2之间的差异_Java_Java 8_Rx Java - Fatal编程技术网

RxJava1和RxJava2之间的差异

RxJava1和RxJava2之间的差异,java,java-8,rx-java,Java,Java 8,Rx Java,我一直在看RxJava1和RxJava2的文档,看起来唯一的不同是RxJava2有Java流 还有其他不同的吗 我一直在使用版本1.1.3,但我不确定是否值得迁移到RxJava2,因为我们已经在代码中使用了Java8流 注意。RxJava 1.x和2.x都是为Java 6+设计的,因此我们不能在任何版本中支持Java 8流。这是为了保持对无数Android设备和版本的支持,这些设备和版本永远不会更新到与Java 8兼容的运行时。如果需要java 8的支持,请考虑使用Pivotal。 两者之间的主

我一直在看RxJava1和RxJava2的文档,看起来唯一的不同是RxJava2有Java流

还有其他不同的吗

我一直在使用版本1.1.3,但我不确定是否值得迁移到RxJava2,因为我们已经在代码中使用了Java8流


注意。

RxJava 1.x和2.x都是为Java 6+设计的,因此我们不能在任何版本中支持Java 8流。这是为了保持对无数Android设备和版本的支持,这些设备和版本永远不会更新到与Java 8兼容的运行时。如果需要java 8的支持,请考虑使用Pivotal。 两者之间的主要区别在于2.x直接以反应流SPI为目标,为此,它已经从头完全重写。我们目前处于开发预览模式,您可以按照中所述访问该模式

完全重写2.x大大提高了内存消耗和性能;比较各种版本和库

在API表面上,我们计划继续支持1.x中存在的所有操作符,并可能在1.x上的支持结束之前用新的版本将这两个版本扩展几年


由于2.x是一种新的体系结构,许多依赖的库(例如,改造)也必须更新;这很可能不会在今年8月底之前发生,也可能需要几个月才能赶上。这包含了差异的亮点。

正如我在中实现的RxJava2

以下是RxJava2和RxJava1之间的区别:

  • 为了允许RxJava1.x和rxjava2.x并排,rxjava2.x位于maven坐标
    io.reactivex.rxjava2:RxJava:2.x.y
    下,并且可以在
    io.reactivex
    下访问类

  • 从1.x切换到2.x的用户必须重新组织导入,但要小心

  • onCompleted
    ->
    onComplete
    -不带尾随的d

  • CompositeSubscription
    ->
    CompositeDisposable
    -
    CompositeDisposable
    ,因为
    CompositeSubscription
    Subscription
    已被删除

  • Func1
    ->
    Function

  • Func2
    ->
    BiFunction

  • limit
    运算符已被删除-在RxJava2中使用
    take

  • RXJava2.0已经在反应流规范的基础上从零开始完全重写。该规范本身已经从RXJava1.x演变而来,并为反应式系统和库提供了一个公共基线

    因为反应流具有不同的体系结构,所以它要求对一些众所周知的RxJava类型进行更改

    与RxJava1相比,RxJava2具有更好的性能低内存使用率


    [来源:]

    一个主要区别适用于
    .filter
    运算符。如文件所述:

    此外,需要谓词的运算符不再使用
    Func1
    ,而是具有单独的原始返回类型
    predicate
    (由于没有自动装箱,因此允许更好的内联)

    因此,对于
    .filter
    操作符,您需要像下面的示例一样进行更改

            RxTextView.textChanges(editText)
                .debounce(400, TimeUnit.MILLISECONDS)
                .filter(new Predicate<CharSequence>() {
                    @Override
                    public boolean lengthOk(CharSequence charSequence) {
                        return charSequence.length() > 3;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(/* attach your observer */);
    
    rxtview.textChanges(编辑文本)
    .debounce(400,时间单位毫秒)
    .filter(新谓词(){
    @凌驾
    公共布尔长度(CharSequence CharSequence){
    返回charSequence.length()>3;
    }
    })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .订阅(/*附上您的观察员*/);
    
    我想说,唯一的区别在于它使用了Java 8中引入的新链接。您是否阅读了您提供的第二个链接?“RXJava1.x不直接实现反应流API”和“RXJava2.x将直接针对反应流API”。对我来说,这听起来像是一个很大的区别:将它从不直接实现API改为直接实际实现API。是的,我读到了,但我只是想确定是否还有其他区别。你最初的假设是,唯一的变化是它需要Java 8+。这与改变API有什么相似之处?你没有任何意义。你想要什么?每项变更的详细清单?比较一下源代码,我不是这么说的,因为我不知道。我只是说,区别不仅仅是需要Java8。如果这不是你的问题,你应该修改你的问题,说出你真正想问什么。