Skip to content

Commit eee13f9

Browse files
committed
Add U.arrayBuilder().
1 parent 461a9df commit eee13f9

File tree

2 files changed

+103
-3
lines changed

2 files changed

+103
-3
lines changed

src/main/java/com/github/underscore/lodash/U.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2281,6 +2281,11 @@ public Builder add(final Builder builder) {
22812281
return this;
22822282
}
22832283

2284+
public Builder add(final String key, final ArrayBuilder builder) {
2285+
data.put(key, builder.build());
2286+
return this;
2287+
}
2288+
22842289
@SuppressWarnings("unchecked")
22852290
public Map<String, Object> build() {
22862291
return (Map<String, Object>) ((LinkedHashMap) data).clone();
@@ -2311,4 +2316,65 @@ public String toString() {
23112316
return data.toString();
23122317
}
23132318
}
2319+
2320+
public static ArrayBuilder arrayBuilder() {
2321+
return new U.ArrayBuilder();
2322+
}
2323+
2324+
public static class ArrayBuilder {
2325+
private final List<Object> data;
2326+
public ArrayBuilder() {
2327+
data = newArrayList();
2328+
}
2329+
2330+
public ArrayBuilder add(final Object value) {
2331+
data.add(value);
2332+
return this;
2333+
}
2334+
2335+
public ArrayBuilder set(final int index, final Object value) {
2336+
data.set(index, value);
2337+
return this;
2338+
}
2339+
2340+
public ArrayBuilder add(final ArrayBuilder builder) {
2341+
data.addAll(builder.build());
2342+
return this;
2343+
}
2344+
2345+
public ArrayBuilder add(final Builder builder) {
2346+
data.add(builder.build());
2347+
return this;
2348+
}
2349+
2350+
@SuppressWarnings("unchecked")
2351+
public List<Object> build() {
2352+
return (List<Object>) ((ArrayList) data).clone();
2353+
}
2354+
2355+
public String toXml() {
2356+
return Xml.toXml(data);
2357+
}
2358+
2359+
public static ArrayBuilder fromXml(final String xml) {
2360+
final ArrayBuilder builder = new ArrayBuilder();
2361+
builder.data.addAll(U.<List<Object>>fromXml(xml));
2362+
return builder;
2363+
}
2364+
2365+
public String toJson() {
2366+
return Json.toJson(data);
2367+
}
2368+
2369+
public static ArrayBuilder fromJson(final String json) {
2370+
final ArrayBuilder builder = new ArrayBuilder();
2371+
builder.data.addAll(U.<List<Object>>fromJson(json));
2372+
return builder;
2373+
}
2374+
2375+
@Override
2376+
public String toString() {
2377+
return data.toString();
2378+
}
2379+
}
23142380
}

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

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,7 @@ public void objectBuilder() {
775775
.add("city", "New York")
776776
.add("state", "NY")
777777
.add("postalCode", "10021"))
778-
.add("phoneNumber", U.objectBuilder()
778+
.add("phoneNumber", U.arrayBuilder()
779779
.add(U.objectBuilder()
780780
.add("type", "home")
781781
.add("number", "212 555-1234"))
@@ -784,8 +784,42 @@ public void objectBuilder() {
784784
.add("number", "646 555-4567")))
785785
.build();
786786
assertEquals("{firstName=John, lastName=Smith, age=25, address={streetAddress=21 2nd Street, "
787-
+ "city=New York, state=NY, postalCode=10021}, phoneNumber={0={type=home, number=212 555-1234}, "
788-
+ "1={type=fax, number=646 555-4567}}}", value.toString());
787+
+ "city=New York, state=NY, postalCode=10021}, phoneNumber=[{type=home, number=212 555-1234}, "
788+
+ "{type=fax, number=646 555-4567}]}", value.toString());
789+
}
790+
791+
@Test
792+
public void arrayBuilder() {
793+
U.ArrayBuilder builder = U.arrayBuilder().add("1").add("2");
794+
builder.add(builder);
795+
builder.toJson();
796+
U.ArrayBuilder.fromJson("[]");
797+
builder.toXml();
798+
U.ArrayBuilder.fromXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root empty-array=\"true\"></root>");
799+
builder.set(1, "3");
800+
builder.toString();
801+
assertEquals("[1, 3, 1, 2]", builder.build().toString());
802+
Map<String, Object> value = U.objectBuilder()
803+
.add("firstName", "John")
804+
.add("lastName", "Smith")
805+
.add("age", 25)
806+
.add("address", U.arrayBuilder()
807+
.add(U.objectBuilder()
808+
.add("streetAddress", "21 2nd Street")
809+
.add("city", "New York")
810+
.add("state", "NY")
811+
.add("postalCode", "10021")))
812+
.add("phoneNumber", U.arrayBuilder()
813+
.add(U.objectBuilder()
814+
.add("type", "home")
815+
.add("number", "212 555-1234"))
816+
.add(U.objectBuilder()
817+
.add("type", "fax")
818+
.add("number", "646 555-4567")))
819+
.build();
820+
assertEquals("{firstName=John, lastName=Smith, age=25, address=[{streetAddress=21 2nd Street, "
821+
+ "city=New York, state=NY, postalCode=10021}], phoneNumber=[{type=home, number=212 555-1234}, "
822+
+ "{type=fax, number=646 555-4567}]}", value.toString());
789823
}
790824

791825
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)