Skip to content

Commit d942307

Browse files
committed
Add methods firstOrNull(list), firstOrNull(list, pred), lastOrNull(list) and
lastOrNull(list, pred) for chain.
1 parent ffb0506 commit d942307

File tree

8 files changed

+100
-4
lines changed
  • lodash-plugin/src
  • math-plugin/src
  • src
  • string-plugin/src

8 files changed

+100
-4
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,14 @@ public Chain<T> first(int n) {
103103
return new Chain<T>($.first(value(), n));
104104
}
105105

106+
public Chain<T> firstOrNull() {
107+
return new Chain<T>($.firstOrNull(value()));
108+
}
109+
110+
public Chain<T> firstOrNull(final Predicate<T> pred) {
111+
return new Chain<T>($.firstOrNull(value(), pred));
112+
}
113+
106114
public Chain<T> initial() {
107115
return new Chain<T>($.initial(value()));
108116
}
@@ -119,6 +127,14 @@ public Chain<T> last(int n) {
119127
return new Chain<T>($.last(value(), n));
120128
}
121129

130+
public Chain<T> lastOrNull() {
131+
return new Chain<T>($.lastOrNull(value()));
132+
}
133+
134+
public Chain<T> lastOrNull(final Predicate<T> pred) {
135+
return new Chain<T>($.lastOrNull(value(), pred));
136+
}
137+
122138
public Chain<T> rest() {
123139
return new Chain<T>($.rest(value()));
124140
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,10 +633,16 @@ public void main() {
633633
public void chain() {
634634
$.chain(new String[] {""}).first();
635635
$.chain(new String[] {""}).first(1);
636+
$.chain(new String[] {""}).firstOrNull();
637+
$.chain(new String[] {""}).firstOrNull(new Predicate<String>() {
638+
public Boolean apply(String str) { return true; } });
636639
$.chain(new String[] {""}).initial();
637640
$.chain(new String[] {""}).initial(1);
638641
$.chain(new String[] {""}).last();
639642
$.chain(new String[] {""}).last(1);
643+
$.chain(new String[] {""}).lastOrNull();
644+
$.chain(new String[] {""}).lastOrNull(new Predicate<String>() {
645+
public Boolean apply(String str) { return true; } });
640646
$.chain(new String[] {""}).rest();
641647
$.chain(new String[] {""}).rest(1);
642648
$.chain(new String[] {""}).compact();

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ public Chain<T> first(int n) {
5757
return new Chain<T>($.first(value(), n));
5858
}
5959

60+
public Chain<T> firstOrNull() {
61+
return new Chain<T>($.firstOrNull(value()));
62+
}
63+
64+
public Chain<T> firstOrNull(final Predicate<T> pred) {
65+
return new Chain<T>($.firstOrNull(value(), pred));
66+
}
67+
6068
public Chain<T> initial() {
6169
return new Chain<T>($.initial(value()));
6270
}
@@ -73,6 +81,14 @@ public Chain<T> last(int n) {
7381
return new Chain<T>($.last(value(), n));
7482
}
7583

84+
public Chain<T> lastOrNull() {
85+
return new Chain<T>($.lastOrNull(value()));
86+
}
87+
88+
public Chain<T> lastOrNull(final Predicate<T> pred) {
89+
return new Chain<T>($.lastOrNull(value(), pred));
90+
}
91+
7692
public Chain<T> rest() {
7793
return new Chain<T>($.rest(value()));
7894
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,10 +244,16 @@ public void main() {
244244
public void chain() {
245245
$.chain(new String[] {""}).first();
246246
$.chain(new String[] {""}).first(1);
247+
$.chain(new String[] {""}).firstOrNull();
248+
$.chain(new String[] {""}).firstOrNull(new Predicate<String>() {
249+
public Boolean apply(String str) { return true; } });
247250
$.chain(new String[] {""}).initial();
248251
$.chain(new String[] {""}).initial(1);
249252
$.chain(new String[] {""}).last();
250253
$.chain(new String[] {""}).last(1);
254+
$.chain(new String[] {""}).lastOrNull();
255+
$.chain(new String[] {""}).lastOrNull(new Predicate<String>() {
256+
public Boolean apply(String str) { return true; } });
251257
$.chain(new String[] {""}).rest();
252258
$.chain(new String[] {""}).rest(1);
253259
$.chain(new String[] {""}).compact();

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -773,8 +773,7 @@ public static <E> E firstOrNull(final Iterable<E> iterable) {
773773
}
774774

775775
public T firstOrNull() {
776-
final Iterator<T> iterator = iterable.iterator();
777-
return iterator.hasNext() ? iterator.next() : null;
776+
return firstOrNull((List<T>) iterable);
778777
}
779778

780779
public static <E> E firstOrNull(final Iterable<E> iterable, final Predicate<E> pred) {
@@ -783,8 +782,7 @@ public static <E> E firstOrNull(final Iterable<E> iterable, final Predicate<E> p
783782
}
784783

785784
public T firstOrNull(final Predicate<T> pred) {
786-
final Iterator<T> iterator = filter(newArrayList(iterable), pred).iterator();
787-
return iterator.hasNext() ? iterator.next() : null;
785+
return firstOrNull((List<T>) iterable, pred);
788786
}
789787

790788
public static <E> E head(final Iterable<E> iterable) {
@@ -1900,6 +1898,14 @@ public Chain<T> first(int n) {
19001898
return new Chain<T>($.first(list, n));
19011899
}
19021900

1901+
public Chain<T> firstOrNull() {
1902+
return new Chain<T>($.firstOrNull(list));
1903+
}
1904+
1905+
public Chain<T> firstOrNull(final Predicate<T> pred) {
1906+
return new Chain<T>($.firstOrNull(list, pred));
1907+
}
1908+
19031909
public Chain<T> initial() {
19041910
return new Chain<T>($.initial(list));
19051911
}
@@ -1916,6 +1922,14 @@ public Chain<T> last(int n) {
19161922
return new Chain<T>($.last(list, n));
19171923
}
19181924

1925+
public Chain<T> lastOrNull() {
1926+
return new Chain<T>($.lastOrNull(list));
1927+
}
1928+
1929+
public Chain<T> lastOrNull(final Predicate<T> pred) {
1930+
return new Chain<T>($.lastOrNull(list, pred));
1931+
}
1932+
19191933
public Chain<T> rest() {
19201934
return new Chain<T>($.rest(list));
19211935
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ public void firstOrNull() {
8080
assertEquals("5", result.toString());
8181
final Integer resultObj = new $<Integer>(asList(5, 4, 3, 2, 1)).firstOrNull();
8282
assertEquals("5", resultObj.toString());
83+
final Integer resultChain = $.chain(asList(5, 4, 3, 2, 1)).firstOrNull().item();
84+
assertEquals("5", resultChain.toString());
8385
assertNull($.firstOrNull(Collections.emptyList()));
8486
assertNull(new $<Integer>(Collections.<Integer>emptyList()).firstOrNull());
8587
final int resultPred = $.firstOrNull(asList(5, 4, 3, 2, 1), new Predicate<Integer>() {
@@ -88,6 +90,12 @@ public Boolean apply(Integer item) {
8890
}
8991
});
9092
assertEquals(4, resultPred);
93+
final int resultPredChain = $.chain(asList(5, 4, 3, 2, 1)).firstOrNull(new Predicate<Integer>() {
94+
public Boolean apply(Integer item) {
95+
return item % 2 == 0;
96+
}
97+
}).item();
98+
assertEquals(4, resultPredChain);
9199
assertNull($.firstOrNull(Collections.<Integer>emptyList(), new Predicate<Integer>() {
92100
public Boolean apply(Integer item) {
93101
return item % 2 == 0;
@@ -279,6 +287,8 @@ public void lastOrNull() {
279287
assertEquals("1", result.toString());
280288
final Integer resultObj = new $<Integer>(asList(5, 4, 3, 2, 1)).lastOrNull();
281289
assertEquals("1", resultObj.toString());
290+
final Integer resultChain = $.chain(asList(5, 4, 3, 2, 1)).lastOrNull().item();
291+
assertEquals("1", resultChain.toString());
282292
assertNull($.lastOrNull(Collections.emptyList()));
283293
assertNull(new $<Integer>(Collections.<Integer>emptyList()).lastOrNull());
284294
final int resultPred = $.lastOrNull(asList(5, 4, 3, 2, 1), new Predicate<Integer>() {
@@ -287,6 +297,12 @@ public Boolean apply(Integer item) {
287297
}
288298
});
289299
assertEquals(2, resultPred);
300+
final int resultPredChain = $.chain(asList(5, 4, 3, 2, 1)).lastOrNull(new Predicate<Integer>() {
301+
public Boolean apply(Integer item) {
302+
return item % 2 == 0;
303+
}
304+
}).item();
305+
assertEquals(2, resultPredChain);
290306
assertNull($.lastOrNull(Collections.<Integer>emptyList(), new Predicate<Integer>() {
291307
public Boolean apply(Integer item) {
292308
return item % 2 == 0;

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,14 @@ public Chain<T> first(int n) {
9494
return new Chain<T>($.first(value(), n));
9595
}
9696

97+
public Chain<T> firstOrNull() {
98+
return new Chain<T>($.firstOrNull(value()));
99+
}
100+
101+
public Chain<T> firstOrNull(final Predicate<T> pred) {
102+
return new Chain<T>($.firstOrNull(value(), pred));
103+
}
104+
97105
public Chain<T> initial() {
98106
return new Chain<T>($.initial(value()));
99107
}
@@ -110,6 +118,14 @@ public Chain<T> last(int n) {
110118
return new Chain<T>($.last(value(), n));
111119
}
112120

121+
public Chain<T> lastOrNull() {
122+
return new Chain<T>($.lastOrNull(value()));
123+
}
124+
125+
public Chain<T> lastOrNull(final Predicate<T> pred) {
126+
return new Chain<T>($.lastOrNull(value(), pred));
127+
}
128+
113129
public Chain<T> rest() {
114130
return new Chain<T>($.rest(value()));
115131
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1949,10 +1949,16 @@ public void main() throws Exception {
19491949
public void chain() {
19501950
$.chain(new String[] {""}).first();
19511951
$.chain(new String[] {""}).first(1);
1952+
$.chain(new String[] {""}).firstOrNull();
1953+
$.chain(new String[] {""}).firstOrNull(new Predicate<String>() {
1954+
public Boolean apply(String str) { return true; } });
19521955
$.chain(new String[] {""}).initial();
19531956
$.chain(new String[] {""}).initial(1);
19541957
$.chain(new String[] {""}).last();
19551958
$.chain(new String[] {""}).last(1);
1959+
$.chain(new String[] {""}).lastOrNull();
1960+
$.chain(new String[] {""}).lastOrNull(new Predicate<String>() {
1961+
public Boolean apply(String str) { return true; } });
19561962
$.chain(new String[] {""}).rest();
19571963
$.chain(new String[] {""}).rest(1);
19581964
$.chain(new String[] {""}).compact();

0 commit comments

Comments
 (0)