1. 程式人生 > >王學崗RxJava(十六)——merge,zip,join等組合方法

王學崗RxJava(十六)——merge,zip,join等組合方法

組合就是多輸入,單輸出,大家看具體的例子

package com.example.acer.rxjavatest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import rx.Observable;
import rx.Observer;

//需求,列印一組使用者名稱
public class MainActivity extends AppCompatActivity {



    @Override
    protected
void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String[] args1=new String[]{"張欣1","張欣2","張欣3","張欣4"}; String[] args2=new String[]{"春曉1","春曉2","春曉3","春曉4"}; //相同的陣列可以進行合併 Observable<String> mergeObservable=Observable.merge(Observable.from(args1),Observable.from(args2)); mergeObservable.subscribe(new
Observer<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.i("zhang_xin",s); } }); } }

看下執行效果
這裡寫圖片描述
注意:在上面的程式中我們還可以把merge換成mergeDelayError();

 Observable<String> mergeObservable=Observable.mergeDelayError(Observable.from(args1),Observable.from(args2));

mergeDelayError()方法:在Observable中,一旦某一個時間丟擲異常,後面的序列將會終止,如果我們希望在序列出錯的時候不影響後面的序列,那麼可以使用mergeDelayErroe()方法!
執行結果同merge同,這裡就不展示了!
merge是把兩個陣列 合併為一個數組,新的陣列長度是原來兩個陣列長度之和;

zip合併後的陣列長度是兩個陣列長度最小的那一個數組的長度;而且我們可以自己定義合併的方式,即合併的演算法自己決定:看程式碼

package com.example.acer.rxjavatest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import rx.Observable;
import rx.Observer;
import rx.functions.Func2;

//需求,列印一組使用者名稱
public class MainActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //陣列長度5
         String[] args1=new String[]{"張欣1","張欣2","張欣3","張欣4","zhangxin5"};
         //陣列長度4
        String[] args2=new String[]{"春曉1","春曉2","春曉3","春曉4"};
        //相同的陣列可以進行合併
        Observable<String> mergeObservable=Observable.zip(Observable.from(args1), Observable.from(args2), new Func2<String, String, String>() {
            @Override
            public String call(String s, String s2) {
                //這裡使我們合併陣列的演算法
                return s+"------"+s2;
            }
        });
        mergeObservable.subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.i("zhang_xin",s);
            }
        });
    }



    }

這裡寫圖片描述
看下join方法,陣列長度是兩個陣列的乘積;

package com.example.acer.rxjavatest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;
import rx.functions.Func1;
import rx.functions.Func2;

//需求,列印一組使用者名稱
public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String[] args1 = new String[]{"張欣1", "張欣2", "張欣3", "張欣4", "zhangxin5"};
        String[] args2 = new String[]{"春曉1", "春曉2", "春曉3", "春曉4"};
        Integer[] args3 = new Integer[]{1, 2, 3, 4, 5, 6};
        Observable<String> o1 = Observable.from(args1);
        Observable<String> o2 = Observable.from(args2);
        //相同的陣列可以進行合併
        Observable<String> joinObservable = o2.join(o1, new Func1<String, Observable<Long>>() {
            @Override
            public Observable<Long> call(String s) {
                return Observable.timer(2, TimeUnit.SECONDS);
            }
        }, new Func1<String, Observable<Long>>() {
            @Override
            public Observable<Long> call(String s) {
                return Observable.timer(2, TimeUnit.SECONDS);
            }
        }, new Func2<String, String, String>() {
            @Override
            public String call(String s, String s2) {
                return s + "-&--" + s2;
            }
        });
        joinObservable.subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.i("zhang_xin", s);
            }
        });
    }


}

這裡寫圖片描述

相關推薦

學崗RxJava()——merge,zip,join組合方法

組合就是多輸入,單輸出,大家看具體的例子 package com.example.acer.rxjavatest; import android.os.Bundle; import android.support.v7.app.AppCompatActi

學崗RxJava(二)————————interval,timer,取消Observable

package com.example.acer.rxjavatest; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.uti

學崗RxJava(二)

我們上面一個簡歷很簡單吧! 我們把上一個例子修改下 package com.tz.architect.rxjava.simple.android.simple3; import java.util.ArrayList; import java.util

Rxjava結合操作符—mergeJoin

1、merge merge可以合併多個發射物 Javadoc: merge(Iterable) Javadoc: merge(Iterable,int) Javadoc: merge(Observable[]) Javadoc: merge(Obser

學崗RxJava(四)

在看一個例子 package com.example.acer.temp; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import androi

學崗RxJava(七)————ReplaySubject

那個RxJava(六)的程式碼BehaviorSubject的程式碼找不到了,直接更新到七了哈! package com.example.acer.rxjavatest; import android.os.Bundle; import android.

進制轉進制的兩種方法 莫名其妙指針

指針 十六進制轉十進制#include<stdio.h> int main() { int n; scanf("%d",&n); printf("%X\n",n); return 0; } 莫名其妙的指針方法#include<s

負數進位制快速計算方法

負數十六進位制快速計算方法 起因:找工作時筆試過程中經常遇到十進位制轉十六進位制的題目, 而且會時不時遇到負數轉十六進位制的題目,題目考察的是應聘 者對進位制轉換的掌握程度。 傳統思路:1.先將十進位制轉二進位制再取反得反碼後加1得到補碼 2.將二進位制4位一組劃分轉成對應十六進位制

iOS直接使用進位制顏色轉換方法

在UIColor的類裡面新增類別方法,可直接使用輸入十六進位制顏色,無需轉換 + (UIColor *)colorWithHexString:(NSString *)color { NSString *cString = [[color strin

C++ printf列印二進位制,三進位制,八進位制,進位制(利用itoa)

printf是格式化輸出函式,它可以直接列印十進位制,八進位制,十六進位制,輸出控制符分別為%d, %o, %x, 但是它不存在二進位制,如果輸出二進位制可以呼叫stdlib.h裡面的itoa函式。

浮點數float轉換成進位制字串的方法(FloatToHex)

重新書寫了float型轉為十六進位制的delphi程式 Function FloatToHex(Value: single): string;   var   l, i: integer;     HexText,tempHexText,temp: Strin

進位制(二進位制,十進位制,進位制)的理解

      進位制也就是進位制,是人們規定的一種進位方法。 對於任何一種進位制---X進位制,就表示某一位置上的數運算時是逢X進一位。 十進位制是逢十進一,十六進位制是逢十六進一,二進位制就是逢二進一       數制是人們利用符號進行計數的科學方法。數制有很多種,在計算機中

scala 高級 scala 集合和集合的高級特性 map flatten fllatmap zip reduce zip 操作

高級 類型 strong nbsp println 參數 highlight 匿名 pri 1. scala 的列表List 和集Set 的操作 //Set 和list 差不多,不過 Set 中不允許有重復的元素 var set=scala.collectio

之泰 201771010131《面向物件程式設計(java)》第週學習總結

    第一部分:理論知識學習部分 第14章 併發 ⚫ 執行緒的概念⚫ 中斷執行緒⚫ 執行緒狀態⚫ 多執行緒排程⚫ 執行緒同步   1.程式與程序的概念 1.1程式是一段靜態的程式碼,它是應用程式執行的藍 本。 1.2程序是程式的一次動態執行,它

201771010130 志成《面向物件程式設計(java)》第週學習總結

1、實驗目的與要求 (1) 掌握執行緒概念; (2) 掌握執行緒建立的兩種技術; (3) 理解和掌握執行緒的優先順序屬性及排程方法; (4) 掌握執行緒同步的概念及實現技術; 2、實驗內容和步驟 實驗1:測試程式並進行程式碼註釋。 測試程式1: l&nb

併發():不要使用Thread.join()——並行變序列

在多執行緒程式的編寫中,為了同步執行緒的執行狀態,我們為了方便,經常會使用Thread.join()方法,須不知此方法有重大的效能缺陷,能將多執行緒程式變成單執行緒程式,執行時間瞬間翻倍,示例如下: /** * 用於長時間的任務計算,一般求fabic(

第二百四節,Bootstrap彈出框和警告框插件

popover 事件 png div 數字 ott hid strong selector Bootstrap彈出框和警告框插件 學習要點:   1.彈出框   2.警告框 本節課我們主要學習一下 Bootstrap 中的彈出框和警告框插件。 一.彈出框 彈

.監控系統cpu.內存,磁盤,自動報警,發送郵件

subject sub percent tmp 工具 exc sendmai join pri 發送郵箱小工具,將它放在#/usr/bin/mail chmod +x /usr/bin/mail #!/usr/bin/python #-*- coding: UTF-8 -

周 項目三-max帶來的沖突

watermark html mes name 實例化 定義函數 項目 names nbsp 分析以下程序出現的編譯錯誤,給出解決的方案。 #include<iostream> using namespace std; //定義函數模板 template&l

網絡編程中的常見陷阱之 0x進制數(C++字面值常量)

十六進制 aid word 網絡編程 情況 技術分享 fill 截斷 常見 十六進制數相等的推斷 請問例如以下程序的輸出是神馬? #include <iostream> #include <string> using namespace std