1
我正在使用RxJava處理兩個需要通過ID連接的大型數據集(數百萬條記錄)。這兩個數據集不一定包含相同的記錄。但他們是由ID排序。在RxJava中加入兩個大型數據集
我發現可以使用join
方法,下面的實驗做了一個「完全連接」,並通過匹配的記錄進行過濾。
public class BatchTest
{
public static void main (String[] args)
{
Observable<Integer> myLeft = Observable.just (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Observable<Integer> myRight = Observable.just (1, 3, 5, 7, 9);
myLeft.join (
myRight,
new Func1<Integer, Observable<Integer>>()
{
public Observable<Integer> call (Integer aT)
{
return Observable.never();
}
},
new Func1<Integer, Observable<Integer>>()
{
public Observable<Integer> call (Integer aT)
{
return Observable.never();
}
},
new Func2<Integer, Integer, Integer[]>()
{
public Integer[] call (Integer aT1, Integer aT2)
{
return new Integer[] {aT1, aT2};
}
})
.filter (new Func1<Integer[], Boolean>()
{
public Boolean call (Integer[] aT)
{
return aT[0].equals (aT[1]);
}
})
.subscribe (new Action1<Integer[]>()
{
public void call (Integer[] aT)
{
System.out.printf ("%d, %d\n", aT[0], aT[1]);
}
});
}
}
這對一小組示例很好,但對於大集合來說效率很低。
所以我的問題是:看到該集合按鍵排序,有沒有辦法使用這些選擇器/窗口函數來限制連接,所以我不必加入300萬條記錄到300萬記錄?
或者我是一起做錯了這一切?