Skip to content

Commit 7c6d8ab

Browse files
committed
Add support for the method toMap().
1 parent 63c6622 commit 7c6d8ab

File tree

4 files changed

+75
-3
lines changed

4 files changed

+75
-3
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,22 @@ public static <E> E[] toArray(final Iterable<E> iterable) {
588588
return (E[]) newArrayList(iterable).toArray();
589589
}
590590

591+
public <E> E[] toArray() {
592+
return toArray((Iterable<E>) iterable);
593+
}
594+
595+
public static <K, V> Map<K, V> toMap(final Iterable<Map.Entry<K, V>> iterable) {
596+
final Map<K, V> result = newLinkedHashMap();
597+
for (Map.Entry<K, V> entry : iterable) {
598+
result.put(entry.getKey(), entry.getValue());
599+
}
600+
return result;
601+
}
602+
603+
public <K, V> Map<K, V> toMap() {
604+
return toMap((Iterable<Map.Entry<K, V>>) iterable);
605+
}
606+
591607
public static int size(final Iterable<?> iterable) {
592608
int size;
593609
final Iterator<?> iterator = iterable.iterator();
@@ -1667,6 +1683,10 @@ public <F extends Comparable<? super F>> Chain<T> sortBy(final Function1<T, F> f
16671683
return new Chain<T>($.sortBy(list, func));
16681684
}
16691685

1686+
public <K, V> Chain<Map<K, V>> toMap() {
1687+
return new Chain<Map<K, V>>($.toMap((Iterable<Map.Entry<K, V>>) list));
1688+
}
1689+
16701690
public <K, V extends Comparable<? super V>> Chain<Map<K, V>> sortBy(final K key) {
16711691
return new Chain<Map<K, V>>($.sortBy((List<Map<K, V>>) list, key));
16721692
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,4 +383,11 @@ public Integer apply(Integer accum, Integer length) {
383383
assertEquals(34, sum);
384384
}
385385

386+
@Test
387+
public void chainToMap() {
388+
assertEquals("{name1=one, name2=two}", $.chain((new LinkedHashMap<String, String>() { {
389+
put("name1", "one");
390+
put("name2", "two");
391+
} }).entrySet()).toMap().item().toString());
392+
}
386393
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,20 @@ public void sample() {
933933
public void toArray() {
934934
final Object[] result = $.<Integer>toArray(asList(1, 2, 3, 4));
935935
assertEquals("1", result[0].toString());
936+
final Object[] resultObj = new $(asList(1, 2, 3, 4)).toArray();
937+
assertEquals("1", resultObj[0].toString());
938+
}
939+
940+
@Test
941+
public void toMap() {
942+
assertEquals("{name1=one, name2=two}", $.toMap((new LinkedHashMap<String, String>() { {
943+
put("name1", "one");
944+
put("name2", "two");
945+
} }).entrySet()).toString());
946+
assertEquals("{name1=one, name2=two}", new $((new LinkedHashMap<String, String>() { {
947+
put("name1", "one");
948+
put("name2", "two");
949+
} }).entrySet()).toMap().toString());
936950
}
937951

938952
/*

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

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,15 +224,46 @@ public void optional() {
224224
@Test
225225
public void stackoverflow() {
226226
// http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java?rq=1
227-
assertEquals("[D=67.3, B=67.4, C=67.4, A=99.5]", $.sortBy((new LinkedHashMap<String, Double>() { {
227+
assertEquals("{D=67.3, B=67.4, C=67.4, A=99.5}", $.chain((new LinkedHashMap<String, Double>() { {
228228
put("A", 99.5);
229229
put("B", 67.4);
230230
put("C", 67.4);
231231
put("D", 67.3);
232-
} }).entrySet(), new Function1<Map.Entry<String, Double>, Double>() {
232+
} }).entrySet()).sortBy(new Function1<Map.Entry<String, Double>, Double>() {
233233
public Double apply(Map.Entry<String, Double> item) {
234234
return item.getValue();
235235
}
236-
}).toString());
236+
}).toMap().item().toString());
237+
}
238+
239+
@Test
240+
public void stackoverflow2() {
241+
// http://stackoverflow.com/questions/12229577/java-hashmap-sorting-string-integer-how-to-sort-it?lq=1
242+
assertEquals("{a=5, f=5, c=4, e=3, b=2, d=2}", $.chain((new HashMap<String, Integer>() { {
243+
put("a", 5);
244+
put("b", 2);
245+
put("c", 4);
246+
put("d", 2);
247+
put("e", 3);
248+
put("f", 5);
249+
} }).entrySet()).sortBy(new Function1<Map.Entry<String, Integer>, Integer>() {
250+
public Integer apply(Map.Entry<String, Integer> item) {
251+
return -item.getValue();
252+
}
253+
}).toMap().item().toString());
254+
}
255+
256+
@Test
257+
public void stackoverflow3() {
258+
// http://stackoverflow.com/questions/11647889/sorting-the-mapkey-value-in-descending-order-based-on-the-value?lq=1
259+
assertEquals("{C=50, A=34, B=25}", $.chain((new HashMap<String, Integer>() { {
260+
put("A", 34);
261+
put("B", 25);
262+
put("C", 50);
263+
} }).entrySet()).sortBy(new Function1<Map.Entry<String, Integer>, Integer>() {
264+
public Integer apply(Map.Entry<String, Integer> item) {
265+
return -item.getValue();
266+
}
267+
}).toMap().item().toString());
237268
}
238269
}

0 commit comments

Comments
 (0)