Skip to content

Commit 75ebac7

Browse files
committed
Add support for the methods filter and reject to the chain object.
1 parent 13eb626 commit 75ebac7

File tree

5 files changed

+81
-11
lines changed

5 files changed

+81
-11
lines changed

pom-central.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<groupId>com.github.javadev</groupId>
66
<artifactId>underscore</artifactId>
77
<packaging>jar</packaging>
8-
<version>1.0</version>
8+
<version>1.1</version>
99
<name>java port of Underscore.js</name>
1010
<description>The java port of Underscore.js</description>
1111
<url>https://github.com/javadev/underscore-java</url>
@@ -41,7 +41,7 @@
4141

4242
<issueManagement>
4343
<system>GitHub Issues</system>
44-
<url>https://github.com/javadev/underscore-java</url>
44+
<url>https://github.com/javadev/underscore-java/issues</url>
4545
</issueManagement>
4646

4747
<build>

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<groupId>com.github.javadev</groupId>
66
<artifactId>underscore</artifactId>
77
<packaging>jar</packaging>
8-
<version>1.0</version>
8+
<version>1.1</version>
99
<name>java port of Underscore.js</name>
1010
<description>The java port of Underscore.js</description>
1111
<url>https://github.com/javadev/underscore-java</url>
@@ -41,7 +41,7 @@
4141

4242
<issueManagement>
4343
<system>GitHub Issues</system>
44-
<url>https://github.com/javadev/underscore-java</url>
44+
<url>https://github.com/javadev/underscore-java/issues</url>
4545
</issueManagement>
4646

4747
<build>

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* The MIT License (MIT)
33
*
4-
* Copyright (c) 2014 Valentyn Kolesnikov
4+
* Copyright (c) 2015 Valentyn Kolesnikov
55
*
66
* Permission is hereby granted, free of charge, to any person obtaining a copy
77
* of this software and associated documentation files (the "Software"), to deal
@@ -889,6 +889,14 @@ public <F> Chain<F> map(final Function1<? super T, F> func) {
889889
return new Chain<F>(_.map(list, func));
890890
}
891891

892+
public Chain<T> filter(final Predicate<T> pred) {
893+
return new Chain<T>(_.filter(list, pred));
894+
}
895+
896+
public Chain<T> reject(final Predicate<T> pred) {
897+
return new Chain<T>(_.reject(list, pred));
898+
}
899+
892900
public <F> Chain<F> reduce(final FunctionAccum<F, T> func, final F zeroElem) {
893901
F accum = zeroElem;
894902
for (T element : list) {
@@ -917,8 +925,12 @@ public <T> Chain<T> concat(final List<T> second) {
917925
return new Chain<T>((List<T>) Arrays.asList(_.concat(list.toArray(), second.toArray())));
918926
}
919927

920-
public String value() {
921-
return item == null ? list.toString() : item.toString();
928+
public T item() {
929+
return item;
930+
}
931+
932+
public List<T> value() {
933+
return list;
922934
}
923935

924936
}

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

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,7 @@ public String apply(Map<String, Object> item) {
11241124
return item.get("name") + " is " + item.get("age");
11251125
}
11261126
})
1127-
.first().value().toString();
1127+
.first().item().toString();
11281128
assertEquals("moe is 21", youngest);
11291129
}
11301130

@@ -1176,7 +1176,7 @@ public Map<String, Object> apply(Map<String, Object> accum, String item) {
11761176
},
11771177
new LinkedHashMap<String, Object>()
11781178
)
1179-
.value();
1179+
.item().toString();
11801180
assertEquals("{I'm=2, a=2, lumberjack=2, and=4, okay=2, I=2, sleep=1, all=4, night=2, work=1, day=2, He's=1,"
11811181
+ " he's=1, He=1, sleeps=1, he=1, works=1}", result);
11821182
}
@@ -1229,11 +1229,69 @@ public Map<String, Object> apply(Map<String, Object> accum, String item) {
12291229
},
12301230
new LinkedHashMap<String, Object>()
12311231
)
1232-
.value();
1232+
.item().toString();
12331233
assertEquals("{day=2, all=4, works=1, he=1, and=4, night=2, sleeps=1,"
12341234
+ " He=1, okay=2, he's=1, lumberjack=2, a=2, He's=1, work=1, I=2, sleep=1, I'm=2}", result);
12351235
}
12361236

1237+
/*
1238+
var doctors = [
1239+
{ number: 1, actor: "William Hartnell", begin: 1963, end: 1966 },
1240+
{ number: 9, actor: "Christopher Eccleston", begin: 2005, end: 2005 },
1241+
{ number: 10, actor: "David Tennant", begin: 2005, end: 2010 }
1242+
];
1243+
_.chain(doctors)
1244+
.filter(function(doctor) {
1245+
return doctor.begin > 2000;
1246+
})
1247+
.reject(function(doctor) {
1248+
return doctor.begin > 2009;
1249+
})
1250+
.map(function(doctor) {
1251+
return {
1252+
doctorNumber: "#" + doctor.number,
1253+
playedBy: doctor.actor,
1254+
yearsPlayed: doctor.end - doctor.begin + 1
1255+
};
1256+
})
1257+
.value();
1258+
1259+
=> [{ doctorNumber: "#9", playedBy: "Christopher Eccleston", yearsPlayed: 1 }]
1260+
*/
1261+
@Test
1262+
public void chain4() throws Exception {
1263+
final List<Map<String, Object>> doctors = new ArrayList<Map<String, Object>>() {{
1264+
add(new LinkedHashMap<String, Object>() {{ put("number", 1); put("actor", "William Hartnell"); put("begin", 1963); put("end", 1966); }});
1265+
add(new LinkedHashMap<String, Object>() {{ put("number", 9); put("actor", "Christopher Eccleston"); put("begin", 2005); put("end", 2005); }});
1266+
add(new LinkedHashMap<String, Object>() {{ put("number", 10); put("actor", "David Tennant"); put("begin", 2005); put("end", 2010); }});
1267+
}};
1268+
final String result = _.chain(doctors)
1269+
.filter(
1270+
new Predicate<Map<String, Object>>() {
1271+
public Boolean apply(Map<String, Object> item) {
1272+
return (Integer) item.get("begin") > 2000;
1273+
}
1274+
})
1275+
.reject(
1276+
new Predicate<Map<String, Object>>() {
1277+
public Boolean apply(Map<String, Object> item) {
1278+
return (Integer) item.get("end") > 2009;
1279+
}
1280+
})
1281+
.map(
1282+
new Function1<Map<String, Object>, Map<String, Object>>() {
1283+
public Map<String, Object> apply(final Map<String, Object> item) {
1284+
return new LinkedHashMap<String, Object>() {{
1285+
put("doctorNumber", "#" + item.get("number"));
1286+
put("playedBy", item.get("actor"));
1287+
put("yearsPlayed", (Integer) item.get("end") - (Integer) item.get("begin") + 1);
1288+
}};
1289+
}
1290+
})
1291+
.value().toString();
1292+
assertEquals("[{doctorNumber=#9, playedBy=Christopher Eccleston, yearsPlayed=1}]", result);
1293+
}
1294+
12371295
/*
12381296
var compiled = _.template("hello: <%= name %>");
12391297
compiled({name: 'moe'});
@@ -1418,7 +1476,7 @@ public void compareStrings() throws Exception {
14181476
public void concat() throws Exception {
14191477
assertEquals(asList(1, 2, 3, 4), asList(_.concat(new Integer[] {1, 2}, new Integer[] {3, 4})));
14201478
assertEquals(asList(1, 2, 3, 4), _.concat(asList(1, 2), asList(3, 4)));
1421-
assertEquals("[1, 2, 3, 4]", _.chain(asList(1, 2)).concat(asList(3, 4)).value());
1479+
assertEquals("[1, 2, 3, 4]", _.chain(asList(1, 2)).concat(asList(3, 4)).value().toString());
14221480
assertEquals(asList(1, 2, 3, 4), asList(_.concat(new Integer[] {1, 2}, new Integer[] {3}, new Integer[] {4})));
14231481
assertEquals(asList(1, 2, 3, 4), _.concat(asList(1, 2), asList(3), asList(4)));
14241482
}

underscore-1.1.jar

42.2 KB
Binary file not shown.

0 commit comments

Comments
 (0)