Skip to content

Commit 5e80980

Browse files
Merge pull request #496 from zsxwing/min-max-contravariant
Add contravariant for min and max
2 parents 1b8840a + a884a67 commit 5e80980

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
@@ -3786,7 +3786,7 @@ public static Observable<Double> averageDoubles(Observable<Double> source) {
37863786
* @throws IllegalArgumentException if the source is empty
37873787
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229715.aspx">MSDN: Observable.Min</a>
37883788
*/
3789-
public static <T extends Comparable<T>> Observable<T> min(Observable<T> source) {
3789+
public static <T extends Comparable<? super T>> Observable<T> min(Observable<T> source) {
37903790
return OperationMinMax.min(source);
37913791
}
37923792

@@ -3803,7 +3803,7 @@ public static <T extends Comparable<T>> Observable<T> min(Observable<T> source)
38033803
* @throws IllegalArgumentException if the source is empty
38043804
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229095.aspx">MSDN: Observable.Min</a>
38053805
*/
3806-
public Observable<T> min(Comparator<T> comparator) {
3806+
public Observable<T> min(Comparator<? super T> comparator) {
38073807
return OperationMinMax.min(this, comparator);
38083808
}
38093809

@@ -3819,7 +3819,7 @@ public Observable<T> min(Comparator<T> comparator) {
38193819
* value
38203820
* @see <a href="http://msdn.microsoft.com/en-us/library/hh228970.aspx">MSDN: Observable.MinBy</a>
38213821
*/
3822-
public <R extends Comparable<R>> Observable<List<T>> minBy(Func1<T, R> selector) {
3822+
public <R extends Comparable<? super R>> Observable<List<T>> minBy(Func1<T, R> selector) {
38233823
return OperationMinMax.minBy(this, selector);
38243824
}
38253825

@@ -3836,7 +3836,7 @@ public <R extends Comparable<R>> Observable<List<T>> minBy(Func1<T, R> selector)
38363836
* key value according to the specified comparator
38373837
* @see <a href="http://msdn.microsoft.com/en-us/library/hh228970.aspx">MSDN: Observable.MinBy</a>
38383838
*/
3839-
public <R> Observable<List<T>> minBy(Func1<T, R> selector, Comparator<R> comparator) {
3839+
public <R> Observable<List<T>> minBy(Func1<T, R> selector, Comparator<? super R> comparator) {
38403840
return OperationMinMax.minBy(this, selector, comparator);
38413841
}
38423842

@@ -3851,7 +3851,7 @@ public <R> Observable<List<T>> minBy(Func1<T, R> selector, Comparator<R> compara
38513851
* @throws IllegalArgumentException if the source is empty
38523852
* @see <a href="http://msdn.microsoft.com/en-us/library/hh211837.aspx">MSDN: Observable.Max</a>
38533853
*/
3854-
public static <T extends Comparable<T>> Observable<T> max(Observable<T> source) {
3854+
public static <T extends Comparable<? super T>> Observable<T> max(Observable<T> source) {
38553855
return OperationMinMax.max(source);
38563856
}
38573857

@@ -3868,7 +3868,7 @@ public static <T extends Comparable<T>> Observable<T> max(Observable<T> source)
38683868
* @throws IllegalArgumentException if the source is empty
38693869
* @see <a href="http://msdn.microsoft.com/en-us/library/hh211635.aspx">MSDN: Observable.Max</a>
38703870
*/
3871-
public Observable<T> max(Comparator<T> comparator) {
3871+
public Observable<T> max(Comparator<? super T> comparator) {
38723872
return OperationMinMax.max(this, comparator);
38733873
}
38743874

@@ -3883,7 +3883,7 @@ public Observable<T> max(Comparator<T> comparator) {
38833883
* value
38843884
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229058.aspx">MSDN: Observable.MaxBy</a>
38853885
*/
3886-
public <R extends Comparable<R>> Observable<List<T>> maxBy(Func1<T, R> selector) {
3886+
public <R extends Comparable<? super R>> Observable<List<T>> maxBy(Func1<T, R> selector) {
38873887
return OperationMinMax.maxBy(this, selector);
38883888
}
38893889

@@ -3900,7 +3900,7 @@ public <R extends Comparable<R>> Observable<List<T>> maxBy(Func1<T, R> selector)
39003900
* key value according to the specified comparator
39013901
* @see <a href="http://msdn.microsoft.com/en-us/library/hh244330.aspx">MSDN: Observable.MaxBy</a>
39023902
*/
3903-
public <R> Observable<List<T>> maxBy(Func1<T, R> selector, Comparator<R> comparator) {
3903+
public <R> Observable<List<T>> maxBy(Func1<T, R> selector, Comparator<? super R> comparator) {
39043904
return OperationMinMax.maxBy(this, selector, comparator);
39053905
}
39063906

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)