王學崗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結合操作符—merge、 Join
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