Skip to content

Commit f240244

Browse files
authored
Add support for the $.sortWith() method.
1 parent a2e4f17 commit f240244

File tree

9 files changed

+74
-1
lines changed

9 files changed

+74
-1
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
language: java
22

33
jdk:
4-
- openjdk6
54
- openjdk7
65
- oraclejdk7
76
- oraclejdk8

lodash-plugin/src/main/java/com/github/underscore/lodash/$.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,11 @@ public Chain<Comparable> sort() {
207207
return new Chain<Comparable>($.sort((List<Comparable>) value()));
208208
}
209209

210+
@SuppressWarnings("unchecked")
211+
public <F extends Comparable<? super F>> Chain<F> sortWith(final Comparator<F> comparator) {
212+
return new Chain<F>($.sortWith((List<F>) value(), comparator));
213+
}
214+
210215
public <F extends Comparable<? super F>> Chain<T> sortBy(final Function1<T, F> func) {
211216
return new Chain<T>($.sortBy(value(), func));
212217
}

lodash-plugin/src/test/java/com/github/underscore/lodash/LodashTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,8 @@ public void chain() {
669669
$.chain(new Integer[] {0}).min(new Function1<Integer, Integer>() {
670670
public Integer apply(Integer value) { return value; } });
671671
$.chain(new Integer[] {0}).sort();
672+
$.chain(new Integer[] {0}).sortWith(new Comparator<Integer>() {
673+
public int compare(Integer value1, Integer value2) { return value1; } });
672674
$.chain(new Integer[] {0}).sortBy(new Function1<Integer, Integer>() {
673675
public Integer apply(Integer value) { return value; } });
674676
$.chain(new LinkedHashMap<Integer, Integer>().entrySet()).sortBy("");

math-plugin/src/main/java/com/github/underscore/math/$.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,11 @@ public Chain<Comparable> sort() {
161161
return new Chain<Comparable>($.sort((List<Comparable>) value()));
162162
}
163163

164+
@SuppressWarnings("unchecked")
165+
public <F extends Comparable<? super F>> Chain<F> sortWith(final Comparator<F> comparator) {
166+
return new Chain<F>($.sortWith((List<F>) value(), comparator));
167+
}
168+
164169
public <F extends Comparable<? super F>> Chain<T> sortBy(final Function1<T, F> func) {
165170
return new Chain<T>($.sortBy(value(), func));
166171
}

math-plugin/src/test/java/com/github/underscore/math/MathTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,8 @@ public void chain() {
280280
$.chain(new Integer[] {0}).min(new Function1<Integer, Integer>() {
281281
public Integer apply(Integer value) { return value; } });
282282
$.chain(new Integer[] {0}).sort();
283+
$.chain(new Integer[] {0}).sortWith(new Comparator<Integer>() {
284+
public int compare(Integer value1, Integer value2) { return value1; } });
283285
$.chain(new Integer[] {0}).sortBy(new Function1<Integer, Integer>() {
284286
public Integer apply(Integer value) { return value; } });
285287
$.chain(new LinkedHashMap<Integer, Integer>().entrySet()).sortBy("");

src/main/java/com/github/underscore/$.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,18 @@ public static <E> Set<E> sample(final List<E> list, final int howMany) {
580580
return samples;
581581
}
582582

583+
public static <T extends Comparable<? super T>> List<T> sortWith(final Iterable<T> iterable,
584+
final Comparator<T> comparator) {
585+
final List<T> sortedList = newArrayList(iterable);
586+
Collections.sort(sortedList, comparator);
587+
return sortedList;
588+
}
589+
590+
@SuppressWarnings("unchecked")
591+
public <T extends Comparable<? super T>> List<T> sortWith(final Comparator<T> comparator) {
592+
return sortWith((Iterable<T>) iterable, comparator);
593+
}
594+
583595
public static <E, T extends Comparable<? super T>> List<E> sortBy(final Iterable<E> iterable,
584596
final Function1<E, T> func) {
585597
final List<E> sortedList = newArrayList(iterable);
@@ -2002,6 +2014,11 @@ public Chain<Comparable> sort() {
20022014
return new Chain<Comparable>($.sort((List<Comparable>) list));
20032015
}
20042016

2017+
@SuppressWarnings("unchecked")
2018+
public <F extends Comparable<? super F>> Chain<F> sortWith(final Comparator<F> comparator) {
2019+
return new Chain<F>($.sortWith((List<F>) list, comparator));
2020+
}
2021+
20052022
public <F extends Comparable<? super F>> Chain<T> sortBy(final Function1<T, F> func) {
20062023
return new Chain<T>($.sortBy(list, func));
20072024
}

src/test/java/com/github/underscore/CollectionsTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,6 +1154,42 @@ public Integer apply(Person item) {
11541154
assertEquals(40, resultPerson.age.intValue());
11551155
}
11561156

1157+
/*
1158+
_.sortWith([1, 2, 3, 4, 5, 6], function(num1, num2){ return Math.sin(num1) - Math.sin(num2); });
1159+
=> [5, 4, 6, 3, 1, 2]
1160+
*/
1161+
@Test
1162+
@SuppressWarnings("unchecked")
1163+
public void sortWith() {
1164+
final List<Integer> result =
1165+
$.sortWith(asList(1, 2, 3, 4, 5, 6),
1166+
new Comparator<Integer>() {
1167+
public int compare(Integer item1, Integer item2) {
1168+
return Double.valueOf(Math.sin(item1) * 1000).intValue()
1169+
- Double.valueOf(Math.sin(item2) * 1000).intValue();
1170+
}
1171+
});
1172+
assertEquals("[5, 4, 6, 3, 1, 2]", result.toString());
1173+
final List<Integer> resultObj =
1174+
new $(asList(1, 2, 3, 4, 5, 6)).sortWith(
1175+
new Comparator<Integer>() {
1176+
public int compare(Integer item1, Integer item2) {
1177+
return Double.valueOf(Math.sin(item1) * 1000).intValue()
1178+
- Double.valueOf(Math.sin(item2) * 1000).intValue();
1179+
}
1180+
});
1181+
assertEquals("[5, 4, 6, 3, 1, 2]", resultObj.toString());
1182+
final List<Integer> resultChain =
1183+
$.chain(asList(1, 2, 3, 4, 5, 6)).sortWith(
1184+
new Comparator<Integer>() {
1185+
public int compare(Integer item1, Integer item2) {
1186+
return Double.valueOf(Math.sin(item1) * 1000).intValue()
1187+
- Double.valueOf(Math.sin(item2) * 1000).intValue();
1188+
}
1189+
}).value();
1190+
assertEquals("[5, 4, 6, 3, 1, 2]", resultChain.toString());
1191+
}
1192+
11571193
/*
11581194
_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
11591195
=> [5, 4, 6, 3, 1, 2]

string-plugin/src/main/java/com/github/underscore/string/$.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@ public Chain<Comparable> sort() {
198198
return new Chain<Comparable>($.sort((List<Comparable>) value()));
199199
}
200200

201+
@SuppressWarnings("unchecked")
202+
public <F extends Comparable<? super F>> Chain<F> sortWith(final Comparator<F> comparator) {
203+
return new Chain<F>($.sortWith((List<F>) value(), comparator));
204+
}
205+
201206
public <F extends Comparable<? super F>> Chain<T> sortBy(final Function1<T, F> func) {
202207
return new Chain<T>($.sortBy(value(), func));
203208
}

string-plugin/src/test/java/com/github/underscore/string/StringTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1985,6 +1985,8 @@ public void chain() {
19851985
$.chain(new Integer[] {0}).min(new Function1<Integer, Integer>() {
19861986
public Integer apply(Integer value) { return value; } });
19871987
$.chain(new Integer[] {0}).sort();
1988+
$.chain(new Integer[] {0}).sortWith(new Comparator<Integer>() {
1989+
public int compare(Integer value1, Integer value2) { return value1; } });
19881990
$.chain(new Integer[] {0}).sortBy(new Function1<Integer, Integer>() {
19891991
public Integer apply(Integer value) { return value; } });
19901992
$.chain(new LinkedHashMap<Integer, Integer>().entrySet()).sortBy("");

0 commit comments

Comments
 (0)