Skip to content

Commit a884a67

Browse files
committed
Add contravariant for min and max
1 parent ba2c1f9 commit a884a67

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed

rxjava-core/src/main/java/rx/Observable.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3649,7 +3649,7 @@ public static Observable<Double> averageDoubles(Observable<Double> source) {
36493649
* if the source is empty
36503650
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229715(v=vs.103).aspx">MSDN: Observable.Min</a>
36513651
*/
3652-
public static <T extends Comparable<T>> Observable<T> min(Observable<T> source) {
3652+
public static <T extends Comparable<? super T>> Observable<T> min(Observable<T> source) {
36533653
return OperationMinMax.min(source);
36543654
}
36553655

@@ -3665,7 +3665,7 @@ public static <T extends Comparable<T>> Observable<T> min(Observable<T> source)
36653665
* if the source is empty
36663666
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229095(v=vs.103).aspx">MSDN: Observable.Min</a>
36673667
*/
3668-
public Observable<T> min(Comparator<T> comparator) {
3668+
public Observable<T> min(Comparator<? super T> comparator) {
36693669
return OperationMinMax.min(this, comparator);
36703670
}
36713671

@@ -3678,7 +3678,7 @@ public Observable<T> min(Comparator<T> comparator) {
36783678
* @return an observable emitting a List of the elements with the minimum key value.
36793679
* @see <a href="http://msdn.microsoft.com/en-us/library/hh228970(v=vs.103).aspx">MSDN: Observable.MinBy</a>
36803680
*/
3681-
public <R extends Comparable<R>> Observable<List<T>> minBy(Func1<T, R> selector) {
3681+
public <R extends Comparable<? super R>> Observable<List<T>> minBy(Func1<T, R> selector) {
36823682
return OperationMinMax.minBy(this, selector);
36833683
}
36843684

@@ -3693,7 +3693,7 @@ public <R extends Comparable<R>> Observable<List<T>> minBy(Func1<T, R> selector)
36933693
* @return an observable emitting a List of the elements with the minimum key value according to the specified comparator.
36943694
* @see <a href="http://msdn.microsoft.com/en-us/library/hh228970(v=vs.103).aspx">MSDN: Observable.MinBy</a>
36953695
*/
3696-
public <R> Observable<List<T>> minBy(Func1<T, R> selector, Comparator<R> comparator) {
3696+
public <R> Observable<List<T>> minBy(Func1<T, R> selector, Comparator<? super R> comparator) {
36973697
return OperationMinMax.minBy(this, selector, comparator);
36983698
}
36993699

@@ -3709,7 +3709,7 @@ public <R> Observable<List<T>> minBy(Func1<T, R> selector, Comparator<R> compara
37093709
* if the source is empty.
37103710
* @see <a href="http://msdn.microsoft.com/en-us/library/hh211837(v=vs.103).aspx">MSDN: Observable.Max</a>
37113711
*/
3712-
public static <T extends Comparable<T>> Observable<T> max(Observable<T> source) {
3712+
public static <T extends Comparable<? super T>> Observable<T> max(Observable<T> source) {
37133713
return OperationMinMax.max(source);
37143714
}
37153715

@@ -3725,7 +3725,7 @@ public static <T extends Comparable<T>> Observable<T> max(Observable<T> source)
37253725
* if the source is empty.
37263726
* @see <a href="http://msdn.microsoft.com/en-us/library/hh211635(v=vs.103).aspx">MSDN: Observable.Max</a>
37273727
*/
3728-
public Observable<T> max(Comparator<T> comparator) {
3728+
public Observable<T> max(Comparator<? super T> comparator) {
37293729
return OperationMinMax.max(this, comparator);
37303730
}
37313731

@@ -3738,7 +3738,7 @@ public Observable<T> max(Comparator<T> comparator) {
37383738
* @return an observable emitting a List of the elements with the maximum key value.
37393739
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229058(v=vs.103).aspx">MSDN: Observable.MaxBy</a>
37403740
*/
3741-
public <R extends Comparable<R>> Observable<List<T>> maxBy(Func1<T, R> selector) {
3741+
public <R extends Comparable<? super R>> Observable<List<T>> maxBy(Func1<T, R> selector) {
37423742
return OperationMinMax.maxBy(this, selector);
37433743
}
37443744

@@ -3753,7 +3753,7 @@ public <R extends Comparable<R>> Observable<List<T>> maxBy(Func1<T, R> selector)
37533753
* @return an observable emitting a List of the elements with the maximum key value according to the specified comparator.
37543754
* @see <a href="http://msdn.microsoft.com/en-us/library/hh244330(v=vs.103).aspx">MSDN: Observable.MaxBy</a>
37553755
*/
3756-
public <R> Observable<List<T>> maxBy(Func1<T, R> selector, Comparator<R> comparator) {
3756+
public <R> Observable<List<T>> maxBy(Func1<T, R> selector, Comparator<? super R> comparator) {
37573757
return OperationMinMax.maxBy(this, selector, comparator);
37583758
}
37593759

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,47 +28,47 @@
2828
*/
2929
public class OperationMinMax {
3030

31-
public static <T extends Comparable<T>> Observable<T> min(
31+
public static <T extends Comparable<? super T>> Observable<T> min(
3232
Observable<T> source) {
3333
return minMax(source, -1L);
3434
}
3535

3636
public static <T> Observable<T> min(Observable<T> source,
37-
final Comparator<T> comparator) {
37+
final Comparator<? super T> comparator) {
3838
return minMax(source, comparator, -1L);
3939
}
4040

41-
public static <T, R extends Comparable<R>> Observable<List<T>> minBy(
41+
public static <T, R extends Comparable<? super R>> Observable<List<T>> minBy(
4242
Observable<T> source, final Func1<T, R> selector) {
4343
return minMaxBy(source, selector, -1L);
4444
}
4545

4646
public static <T, R> Observable<List<T>> minBy(Observable<T> source,
47-
final Func1<T, R> selector, final Comparator<R> comparator) {
47+
final Func1<T, R> selector, final Comparator<? super R> comparator) {
4848
return minMaxBy(source, selector, comparator, -1L);
4949
}
5050

51-
public static <T extends Comparable<T>> Observable<T> max(
51+
public static <T extends Comparable<? super T>> Observable<T> max(
5252
Observable<T> source) {
5353
return minMax(source, 1L);
5454
}
5555

5656
public static <T> Observable<T> max(Observable<T> source,
57-
final Comparator<T> comparator) {
57+
final Comparator<? super T> comparator) {
5858
return minMax(source, comparator, 1L);
5959
}
6060

61-
public static <T, R extends Comparable<R>> Observable<List<T>> maxBy(
61+
public static <T, R extends Comparable<? super R>> Observable<List<T>> maxBy(
6262
Observable<T> source, final Func1<T, R> selector) {
6363
return minMaxBy(source, selector, 1L);
6464
}
6565

6666
public static <T, R> Observable<List<T>> maxBy(Observable<T> source,
67-
final Func1<T, R> selector, final Comparator<R> comparator) {
67+
final Func1<T, R> selector, final Comparator<? super R> comparator) {
6868
return minMaxBy(source, selector, comparator, 1L);
6969
}
7070

71-
private static <T extends Comparable<T>> Observable<T> minMax(
71+
private static <T extends Comparable<? super T>> Observable<T> minMax(
7272
Observable<T> source, final long flag) {
7373
return source.reduce(new Func2<T, T, T>() {
7474
@Override
@@ -82,7 +82,7 @@ public T call(T acc, T value) {
8282
}
8383

8484
private static <T> Observable<T> minMax(Observable<T> source,
85-
final Comparator<T> comparator, final long flag) {
85+
final Comparator<? super T> comparator, final long flag) {
8686
return source.reduce(new Func2<T, T, T>() {
8787
@Override
8888
public T call(T acc, T value) {
@@ -94,7 +94,7 @@ public T call(T acc, T value) {
9494
});
9595
}
9696

97-
private static <T, R extends Comparable<R>> Observable<List<T>> minMaxBy(
97+
private static <T, R extends Comparable<? super R>> Observable<List<T>> minMaxBy(
9898
Observable<T> source, final Func1<T, R> selector, final long flag) {
9999
return source.reduce(new ArrayList<T>(),
100100
new Func2<List<T>, T, List<T>>() {
@@ -119,7 +119,7 @@ public List<T> call(List<T> acc, T value) {
119119
}
120120

121121
private static <T, R> Observable<List<T>> minMaxBy(Observable<T> source,
122-
final Func1<T, R> selector, final Comparator<R> comparator,
122+
final Func1<T, R> selector, final Comparator<? super R> comparator,
123123
final long flag) {
124124
return source.reduce(new ArrayList<T>(),
125125
new Func2<List<T>, T, List<T>>() {

0 commit comments

Comments
 (0)