RxJava 1.x from()和just()用法、区别和举例

RxJava 1.x 中的 Observable.from 和 Observable.just 用于将Java 面向对象中的数据转换为 RxJava 中的数据单元。

一、from

RxJava 1.x from用于转换多个数据,比如 ArrayList等包含多个数据的数组或者列表。
RxJava 1.x 包含了5个 Observable.from 的重载方法:

public static <T> Observable<T> from(Iterable <? extends T> iterable)

public static <T> Observable<T> from(T[] array)

public static <T> Observable<T> from(Future<? extends T> future)

public static <T> Observable<T> from(Future<? extends T> future, long timeout, TimeUnit unit) 

public static <T> Observable<T> from(Future<? extends T> future, Scheduler scheduler)  

二、just

RxJava 1.x 包含了10个 Observable.just 的重载方法:
RxJava 1.x 中的 Observable.just 用于创建仅有一个的数据对象。

public static <T> Observable<T> just(final T value)

public static <T> Observable<T> just(T t1, T t2)

public static <T> Observable<T> just(T t1, T t2, T t3)

public static <T> Observable<T> just(T t1, T t2, T t3, T t4)

public static <T> Observable<T> just(T t1, T t2, T t3, T t4, T t5)

public static <T> Observable<T> just(T t1, T t2, T t3, T t4, T t5, T t6)

public static <T> Observable<T> just(T t1, T t2, T t3, T t4, T t5, T t6, T t7)

public static <T> Observable<T> just(T t1, T t2, T t3, T t4, T t5, T t6, T t7, T t8)

public static <T> Observable<T> just(T t1, T t2, T t3, T t4, T t5, T t6, T t7, T t8, T t9)

public static <T> Observable<T> just(T t1, T t2, T t3, T t4, T t5, T t6, T t7, T t8, T t9, T t10)

三、from和just的区别

from和just的区别
- 1、from用于转换多个数据,比如 ArrayList等包含多个数据的数组或者列表;
- 2、而 just 只用于处理单个的数据。

会不会有人有疑问?just 明明提供了10个重载的方法,最多可以接受10个参数啊!

四、from和just的相互转换

如果from的转换数组中只包含一个数据,就是just的情况。
如果just 多于一个数据,就是from的情况。

看看源代码就一目了然:

1、from 遇到只包含一个数据的时候,会使用just创建Observable

 public static <T> Observable<T> from(T[] array) {
        int n = array.length;
        if (n == 0) {
            return empty();
        } else
        if (n == 1) {
            return just(array[0]);
        }
        return unsafeCreate(new OnSubscribeFromArray<T>(array));
    }

2、just 遇到多于一个的情况,会使用from 创建 Observable

public static <T> Observable<T> just(T t1, T t2) {
        return from((T[])new Object[] { t1, t2 });
    }

public static <T> Observable<T> just(T t1, T t2, T t3) {
        return from((T[])new Object[] { t1, t2, t3 });
    }

public static <T> Observable<T> just(T t1, T t2, T t3, T t4) {
        return from((T[])new Object[] { t1, t2, t3, t4 });
    }

...

public static <T> Observable<T> just(T t1, T t2, T t3, T t4, T t5, T t6, T t7, T t8, T t9, T t10) {
        return from((T[])new Object[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 });
    }

所以,使用的时候,可以根据需要和习惯使用这两个方法。

五、使用举例

1、读取List数据

List<String> list = Arrays.asList(
     "blue", "red", "green", "yellow", "orange", "cyan", "purple"
   );
   Observable<String> listObservable = Observable.from(list);
listObservable.subscribe(System.out::println);

2、读取文件内容

Path resources = Paths.get("src", "main", "resources");
   try (DirectoryStream<Path> dStream
   =Files.newDirectoryStream(resources)) {
     Observable<Path> dirObservable = Observable.from(dStream);
     dirObservable.subscribe(System.out::println);
   }catch (IOException e) {
  e.printStackTrace();
}

3、读取数组

   Observable<Integer> arrayObservable =
     Observable.from(new Integer[] {3, 5, 8});
     arrayObservable.subscribe(System.out::println);

4、单个字符

Observable.just('S').subscribe(System.out::println);

5、多个字符

Observable
     .just('R', 'x', 'J', 'a', 'v', 'a')
     .subscribe(System.out::print,
       System.err::println,
       System.out::println
);

6、类数据


   public static class User {
     private final String forename;
     private final String lastname;
     public User(String forename, String lastname) {
       this.forename = forename;
       this.lastname = lastname;
     }
     public String getForename() {
       return this.forename;
     }
     public String getLastname() {
       return this.lastname;
     }
}

Observable
     .just(new User("Dali", "Bali"))
     .map(u -> u.getForename() + " " + u.getLastname())
     .subscribe(System.out::println);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值