Skip to content

Commit a3f7a83

Browse files
committed
Rename observer to subscriber and add a special logic to exit the loop
1 parent cd84189 commit a3f7a83

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

rxjava-core/src/main/java/rx/operators/OperatorAmb.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import rx.Observable;
2323
import rx.Observable.OnSubscribe;
24-
import rx.Observer;
2524
import rx.Subscriber;
2625

2726
/**
@@ -121,12 +120,12 @@ private static final class AmbSubscriber<T> extends Subscriber<T> {
121120

122121
private static final int NONE = -1;
123122

124-
private Observer<? super T> observer;
125-
private int index;
126-
private AtomicInteger choice;
123+
private final Subscriber<? super T> subscriber;
124+
private final int index;
125+
private final AtomicInteger choice;
127126

128-
private AmbSubscriber(Subscriber<? super T> observer, int index, AtomicInteger choice) {
129-
this.observer = observer;
127+
private AmbSubscriber(Subscriber<? super T> subscriber, int index, AtomicInteger choice) {
128+
this.subscriber = subscriber;
130129
this.choice = choice;
131130
this.index = index;
132131
}
@@ -137,7 +136,7 @@ public void onNext(T args) {
137136
unsubscribe();
138137
return;
139138
}
140-
observer.onNext(args);
139+
subscriber.onNext(args);
141140
}
142141

143142
@Override
@@ -146,7 +145,7 @@ public void onCompleted() {
146145
unsubscribe();
147146
return;
148147
}
149-
observer.onCompleted();
148+
subscriber.onCompleted();
150149
}
151150

152151
@Override
@@ -155,7 +154,7 @@ public void onError(Throwable e) {
155154
unsubscribe();
156155
return;
157156
}
158-
observer.onError(e);
157+
subscriber.onError(e);
159158
}
160159

161160
private boolean isSelected() {
@@ -180,6 +179,10 @@ public void call(Subscriber<? super T> subscriber) {
180179
if (subscriber.isUnsubscribed()) {
181180
break;
182181
}
182+
if (choice.get() != AmbSubscriber.NONE) {
183+
// Already choose someone, the rest Observables can be skipped.
184+
break;
185+
}
183186
AmbSubscriber<T> ambSubscriber = new AmbSubscriber<T>(subscriber, index, choice);
184187
subscriber.add(ambSubscriber);
185188
source.subscribe(ambSubscriber);

0 commit comments

Comments
 (0)