File tree Expand file tree Collapse file tree 1 file changed +8
-9
lines changed
rxjava-core/src/main/java/rx/operators Expand file tree Collapse file tree 1 file changed +8
-9
lines changed Original file line number Diff line number Diff line change 15
15
*/
16
16
package rx .operators ;
17
17
18
+ import java .util .ArrayDeque ;
18
19
import java .util .Deque ;
19
- import java .util .LinkedList ;
20
20
21
21
import rx .Observable .Operator ;
22
22
import rx .Subscriber ;
@@ -38,10 +38,13 @@ public OperatorSkipLast(int count) {
38
38
@ Override
39
39
public Subscriber <? super T > call (final Subscriber <? super T > subscriber ) {
40
40
return new Subscriber <T >(subscriber ) {
41
+
42
+ private final NotificationLite <T > on = NotificationLite .instance ();
43
+
41
44
/**
42
45
* Store the last count elements until now.
43
46
*/
44
- private final Deque <T > deque = new LinkedList < T >();
47
+ private final Deque <Object > deque = new ArrayDeque < Object >();
45
48
46
49
@ Override
47
50
public void onCompleted () {
@@ -62,14 +65,10 @@ public void onNext(T value) {
62
65
subscriber .onNext (value );
63
66
return ;
64
67
}
65
- deque .offerLast (value );
66
- if (deque .size () > count ) {
67
- // Now deque has count + 1 elements, so the first
68
- // element in the deque definitely does not belong
69
- // to the last count elements of the source
70
- // sequence. We can emit it now.
71
- subscriber .onNext (deque .removeFirst ());
68
+ if (deque .size () == count ) {
69
+ subscriber .onNext (on .getValue (deque .removeFirst ()));
72
70
}
71
+ deque .offerLast (on .next (value ));
73
72
}
74
73
75
74
};
You can’t perform that action at this time.
0 commit comments