2017-05-06 117 views
1

我有一個Observable,它發出一些數字,我只想取最後的N個元素。獲取由RxJava2中observable發出的N個最後一個對象

我有以下代碼(我用RxKotlin這簡直是在RxJava包裝):

val list = listOf(1,2,3,4,5,6,7,8,9,10) 
Observable.fromIterable(list) 
      .buffer(3, 1) 
      .lastOrError() 
      .subscribe{value -> println(value)} 

不幸的是,結果是[10],我仔細看了一下緩衝算回報,我看到這一點:

[1, 2, 3] 
[2, 3, 4] 
[3, 4, 5] 
[4, 5, 6] 
[5, 6, 7] 
[6, 7, 8] 
[7, 8, 9] 
[8, 9, 10] 
[9, 10] 
[10] 

有沒有辦法讓最後的 「全面」 緩衝 - >[8, 9, 10]

回答

4

在RxJava,很多運營商有相同的操作的通用語言表達式匹配的名稱:取+最後N - >takeLast(int n)

Observable.range(1, 10) 
    .takeLast(3) 
    .toList() // <-- in case you want it as a list 
    .subscribe(System.out::println); 
相關問題