Skip to content

Commit 1a0c3f3

Browse files
committed
Add object version of the method concat -> concatTo, reverse, slice and
join.
1 parent 8e5a03a commit 1a0c3f3

File tree

3 files changed

+45
-25
lines changed

3 files changed

+45
-25
lines changed

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

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -559,14 +559,7 @@ public static <K, E> Map<K, Integer> countBy(final Iterable<E> iterable, Functio
559559
}
560560

561561
public static <E> E[] toArray(final Iterable<E> iterable) {
562-
final List<E> list = newArrayList();
563-
each(iterable, new Block<E>() {
564-
@Override
565-
public void apply(E elem) {
566-
list.add(elem);
567-
}
568-
});
569-
return (E[]) list.toArray();
562+
return (E[]) newArrayList(iterable).toArray();
570563
}
571564

572565
public static int size(final Iterable<?> iterable) {
@@ -1754,6 +1747,10 @@ public static <T> String join(final T[] array, final String separator) {
17541747
return join(Arrays.asList(array), separator);
17551748
}
17561749

1750+
public String join(final String separator) {
1751+
return join(iterable, separator);
1752+
}
1753+
17571754
public static <T> T[] concat(final T[] first, final T[] ... other) {
17581755
int length = 0;
17591756
for (T[] otherItem : other) {
@@ -1768,26 +1765,31 @@ public static <T> T[] concat(final T[] first, final T[] ... other) {
17681765
return result;
17691766
}
17701767

1771-
public static <T> List<T> concat(final List<T> first, final List<T> ... other) {
1768+
public static <T> List<T> concat(final Iterable<T> first, final Iterable<T> ... other) {
17721769
int length = 0;
1773-
for (List<T> otherItem : other) {
1774-
length += otherItem.size();
1770+
for (Iterable<T> otherItem : other) {
1771+
length += size(otherItem);
17751772
}
1776-
final T[] result = (T[]) Arrays.copyOf(first.toArray(), first.size() + length);
1773+
final T[] result = (T[]) Arrays.copyOf(toArray(first), size(first) + length);
17771774
int index = 0;
1778-
for (List<T> otherItem : other) {
1779-
System.arraycopy(otherItem.toArray(), 0, result, first.size() + index, otherItem.size());
1780-
index += otherItem.size();
1775+
for (Iterable<T> otherItem : other) {
1776+
System.arraycopy(toArray(otherItem), 0, result, size(first) + index, size(otherItem));
1777+
index += size(otherItem);
17811778
}
17821779
return (List<T>) Arrays.asList(result);
17831780
}
17841781

1785-
public static <T> List<T> slice(final List<T> list, final int start) {
1782+
1783+
public List<T> concatTo(final Iterable<T> ... other) {
1784+
return concat(iterable, other);
1785+
}
1786+
1787+
public static <T> List<T> slice(final Iterable<T> list, final int start) {
17861788
final List<T> result;
17871789
if (start > 0) {
1788-
result = list.subList(start, list.size());
1790+
result = newArrayList(list).subList(start, size(list));
17891791
} else {
1790-
result = list.subList(list.size() + start, list.size());
1792+
result = newArrayList(list).subList(size(list) + start, size(list));
17911793
}
17921794
return result;
17931795
}
@@ -1796,19 +1798,23 @@ public static <T> T[] slice(final T[] array, final int start) {
17961798
return (T[]) slice(Arrays.asList(array), start).toArray();
17971799
}
17981800

1799-
public static <T> List<T> slice(final List<T> list, final int start, final int end) {
1801+
public List<T> slice(final int start) {
1802+
return slice(iterable, start);
1803+
}
1804+
1805+
public static <T> List<T> slice(final Iterable<T> list, final int start, final int end) {
18001806
final List<T> result;
18011807
if (start > 0) {
18021808
if (end > 0) {
1803-
result = list.subList(start, end);
1809+
result = newArrayList(list).subList(start, end);
18041810
} else {
1805-
result = list.subList(start, list.size() + end);
1811+
result = newArrayList(list).subList(start, size(list) + end);
18061812
}
18071813
} else {
18081814
if (end > 0) {
1809-
result = list.subList(list.size() + start, end);
1815+
result = newArrayList(list).subList(size(list) + start, end);
18101816
} else {
1811-
result = list.subList(list.size() + start, list.size() + end);
1817+
result = newArrayList(list).subList(size(list) + start, size(list) + end);
18121818
}
18131819
}
18141820
return result;
@@ -1818,7 +1824,11 @@ public static <T> T[] slice(final T[] array, final int start, final int end) {
18181824
return (T[]) slice(Arrays.asList(array), start, end).toArray();
18191825
}
18201826

1821-
public static <T> List<T> reverse(final List<T> list) {
1827+
public List<T> slice(final int start, final int end) {
1828+
return slice(iterable, start, end);
1829+
}
1830+
1831+
public static <T> List<T> reverse(final Iterable<T> list) {
18221832
final List<T> result = (List<T>) clone(newArrayList(list));
18231833
Collections.reverse(result);
18241834
return result;
@@ -1828,6 +1838,10 @@ public static <T> T[] reverse(final T[] array) {
18281838
return (T[]) reverse(newArrayList(Arrays.asList(array))).toArray();
18291839
}
18301840

1841+
public List<T> reverse() {
1842+
return reverse(iterable);
1843+
}
1844+
18311845
public Iterable<T> getIterable() {
18321846
return iterable;
18331847
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void once() throws Exception {
143143
Function<Void> onceIncr = $.once(incr);
144144
onceIncr.apply();
145145
onceIncr.apply();
146-
Thread.sleep(32);
146+
Thread.sleep(48);
147147
assertEquals("incr was called only once", 1, counter[0]);
148148
}
149149

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public Integer apply(String arg) {
6868
@Test
6969
public void join() {
7070
assertEquals("some-words-example", $.join(asList("some", "words", "example"), "-"));
71+
assertEquals("some-words-example", new $(asList("some", "words", "example")).join("-"));
7172
assertEquals("some-words-example", $.join(new String[] {"some", "words", "example"}, "-"));
7273
assertEquals("some-words-example", $.chain(asList("some", "words", "example")).join("-").item());
7374
}
@@ -85,9 +86,11 @@ public void compareStrings() {
8586
public void concat() {
8687
assertEquals(asList(1, 2, 3, 4), asList($.concat(new Integer[] {1, 2}, new Integer[] {3, 4})));
8788
assertEquals(asList(1, 2, 3, 4), $.concat(asList(1, 2), asList(3, 4)));
89+
assertEquals(asList(1, 2, 3, 4), new $(asList(1, 2)).concatTo(asList(3, 4)));
8890
assertEquals("[1, 2, 3, 4]", $.chain(asList(1, 2)).concat(asList(3, 4)).value().toString());
8991
assertEquals(asList(1, 2, 3, 4), asList($.concat(new Integer[] {1, 2}, new Integer[] {3}, new Integer[] {4})));
9092
assertEquals(asList(1, 2, 3, 4), $.concat(asList(1, 2), asList(3), asList(4)));
93+
assertEquals(asList(1, 2, 3, 4), new $(asList(1, 2)).concatTo(asList(3), asList(4)));
9194
}
9295

9396
/*
@@ -101,9 +104,11 @@ public void concat() {
101104
@Test
102105
public void slice() {
103106
assertEquals(asList(3, 4, 5), $.slice(asList(1, 2, 3, 4, 5), 2));
107+
assertEquals(asList(3, 4, 5), new $(asList(1, 2, 3, 4, 5)).slice(2));
104108
assertEquals(asList(2, 3, 4), $.slice(asList(1, 2, 3, 4, 5), 1, 4));
105109
assertEquals(asList(2, 3, 4), $.slice(asList(1, 2, 3, 4, 5), 1, -1));
106110
assertEquals(asList(3), $.slice(asList(1, 2, 3, 4, 5), 2, 3));
111+
assertEquals(asList(3), new $(asList(1, 2, 3, 4, 5)).slice(2, 3));
107112
assertEquals(asList(4, 5), $.slice(asList(1, 2, 3, 4, 5), -2));
108113
assertEquals(asList(3, 4), $.slice(asList(1, 2, 3, 4, 5), -3, -1));
109114
assertEquals(asList(3, 4), $.slice(asList(1, 2, 3, 4, 5), -3, 4));
@@ -119,6 +124,7 @@ public void slice() {
119124
@Test
120125
public void reverse() {
121126
assertEquals("[3, 2, 1]", $.reverse(asList(1, 2, 3)).toString());
127+
assertEquals("[3, 2, 1]", new $(asList(1, 2, 3)).reverse().toString());
122128
assertEquals("[3, 2, 1]", asList($.reverse(new Integer[] {1, 2, 3})).toString());
123129
assertEquals("[3, 2, 1]", $.chain(asList(1, 2, 3)).reverse().value().toString());
124130
}

0 commit comments

Comments
 (0)