Skip to content
gqlxj1987's Blog
Go back

RxJava intro

Edit page

原文链接

关于流式编程的一些说明,Stream API

// JavaScript
let r = [1,2,3,4,5,6,7,8,9].filter(i=>i>5).map(i=>i*10).reduce((a,b)=>a+b, 0)

// Ruby
r = [1,2,3,4,5,6,7,8,9].select {|i| i>5}.map {|i| i*10}.reduce(0) {|a,b| a+b}

// Swift
var r = [1,2,3,4,5,6,7,8,9].filter {$0>5}.map {$0*10}.reduce(0) {$0+$1}
Integer[] numbers = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
Observable.from(numbers)
        .filter(integer) -> { return integer > 5; })
        .map((integer) -> { return integer * 10; })
        .reduce(0, (int1, int2) -> { return int1 + int2; })
        .subscribe((integer) -> { Log.i(TAG, "result: " + integer); });
  1. 流式编程法,每一个单独的步骤,在内部都重新对整体数据进行一次循环,因此它要做很多次小循环,但整体的流程只走一遍。
  2. Rx,只在数据最源头,对整体数据进行一次循环,取出每一个单独的数据,让它去走一遍整体流程,因此,它只做一次循环,但整个的流程会走很多遍。

对于 Rx 来说,如果数据源不是固定的,那么它可以监听这个数据来源,当有数据到来时,它就可以把它发射出去把整个流程走一遍。这就是我用来理解 Rx 的观察者模式和响应式编程的方法。

Rx 比常见流式编程的抽象程度更高,它不光抽象了对数据的操作,还抽象了线程切换操作。

Rx的Promise和Observable对象:

只要是 T -> Observable 的变换,就应该用 flatMap


Edit page
Share this post on:

Previous Post
时间计划
Next Post
逃避可耻但有用(续)