Skip to content

Commit cdfe454

Browse files
authored
Add map for chain.
1 parent 9532f7b commit cdfe454

File tree

5 files changed

+79
-1
lines changed

5 files changed

+79
-1
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ dist: trusty
33

44
jdk:
55
- oraclejdk8
6-
- oraclejdk9
76
- openjdk11
87
- openjdk16
98

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public class U<T> {
8080
private static final Map<Character, String> ESCAPES = new HashMap<>();
8181
private final Iterable<T> iterable;
8282
private final Optional<String> string;
83+
private final Optional<Map<String, Object>> map;
8384

8485
static {
8586
TEMPLATE_SETTINGS.put(EVALUATE, "<%([\\s\\S]+?)%>");
@@ -96,11 +97,19 @@ public class U<T> {
9697
public U(final Iterable<T> iterable) {
9798
this.iterable = iterable;
9899
this.string = Optional.absent();
100+
this.map = Optional.absent();
99101
}
100102

101103
public U(final String string) {
102104
this.iterable = null;
103105
this.string = Optional.of(string);
106+
this.map = Optional.absent();
107+
}
108+
109+
public U(final Map<String, Object> map) {
110+
this.iterable = null;
111+
this.string = Optional.absent();
112+
this.map = Optional.of(map);
104113
}
105114

106115
private static void setTemplateKey(final Map<String, String> templateSettings, final String key) {
@@ -2625,6 +2634,10 @@ public static <T> Chain<T> chain(final List<T> list) {
26252634
return new U.Chain<>(list);
26262635
}
26272636

2637+
public static Chain<Map<String, Object>> chain(final Map<String, Object> map) {
2638+
return new U.Chain<>(map);
2639+
}
2640+
26282641
public static <T> Chain<T> chain(final Iterable<T> iterable) {
26292642
return new U.Chain<>(newArrayList(iterable));
26302643
}
@@ -2674,13 +2687,21 @@ public Chain<T> of() {
26742687
public static class Chain<T> {
26752688
private final T item;
26762689
private final List<T> list;
2690+
private final Map<String, Object> map;
26772691
public Chain(final T item) {
26782692
this.item = item;
26792693
this.list = null;
2694+
this.map = null;
26802695
}
26812696
public Chain(final List<T> list) {
26822697
this.item = null;
26832698
this.list = list;
2699+
this.map = null;
2700+
}
2701+
public Chain(final Map<String, Object> map) {
2702+
this.item = null;
2703+
this.list = null;
2704+
this.map = map;
26842705
}
26852706

26862707
public Chain<T> first() {
@@ -3099,6 +3120,10 @@ public List<T> value() {
30993120
return list;
31003121
}
31013122

3123+
public Map<String, Object> map() {
3124+
return map;
3125+
}
3126+
31023127
public List<T> toList() {
31033128
return list;
31043129
}
@@ -3407,6 +3432,10 @@ public Iterable<T> value() {
34073432
return iterable;
34083433
}
34093434

3435+
public Optional<Map<String, Object>> map() {
3436+
return map;
3437+
}
3438+
34103439
public Optional<String> getString() {
34113440
return string;
34123441
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,20 @@ public U(final String string) {
115115
super(string);
116116
}
117117

118+
public U(final Map<String, Object> map) {
119+
super(map);
120+
}
121+
118122
public static class Chain<T> extends com.github.underscore.U.Chain<T> {
119123
public Chain(final T item) {
120124
super(item);
121125
}
122126
public Chain(final List<T> list) {
123127
super(list);
124128
}
129+
public Chain(final Map<String, Object> map) {
130+
super(map);
131+
}
125132

126133
public Chain<T> first() {
127134
return new Chain<>(com.github.underscore.U.first(value()));
@@ -450,6 +457,11 @@ public Chain<T> slice(final int start, final int end) {
450457
return new Chain<>(com.github.underscore.U.slice(value(), start, end));
451458
}
452459

460+
public Chain<Map<String, Object>> set(final String path, Object value) {
461+
U.set(map(), path, value);
462+
return new Chain<>(map());
463+
}
464+
453465
public Chain<T> reverse() {
454466
return new Chain<>(com.github.underscore.U.reverse(value()));
455467
}
@@ -744,6 +756,10 @@ public static <T> Chain<T> chain(final List<T> list) {
744756
return new U.Chain<>(list);
745757
}
746758

759+
public static Chain<Map<String, Object>> chain(final Map<String, Object> map) {
760+
return new U.Chain<>(map);
761+
}
762+
747763
public static <T> Chain<T> chain(final Iterable<T> iterable) {
748764
return new U.Chain<>(newArrayList(iterable));
749765
}
@@ -773,6 +789,10 @@ public static <T> Chain<T> of(final List<T> list) {
773789
return new U.Chain<>(list);
774790
}
775791

792+
public static Chain<Map<String, Object>> of(final Map<String, Object> map) {
793+
return new U.Chain<>(map);
794+
}
795+
776796
public static <T> Chain<T> of(final Iterable<T> iterable) {
777797
return new U.Chain<>(newArrayList(iterable));
778798
}

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,4 +386,33 @@ public void chainRange() {
386386
assertEquals("[0, 1, 2]", U.chain(U.range(3)).value().toString());
387387
}
388388

389+
@Test
390+
@SuppressWarnings("unchecked")
391+
public void chainMap() {
392+
assertEquals("{name1=one, name2=two}", U.chain(
393+
new LinkedHashMap<String, Object>() { {
394+
put("name1", "one");
395+
put("name2", "two");
396+
} }).map().toString());
397+
assertEquals("{name1=one, name2=two, 1=2}", com.github.underscore.lodash.U.chain(
398+
new LinkedHashMap<String, Object>() { {
399+
put("name1", "one");
400+
put("name2", "two");
401+
} }).set("1", "2").map().toString());
402+
assertEquals("{name1=one, name2=two, 1=2}", com.github.underscore.lodash.U.of(
403+
new LinkedHashMap<String, Object>() { {
404+
put("name1", "one");
405+
put("name2", "two");
406+
} }).set("1", "2").map().toString());
407+
assertEquals("{name1=one, name2=two}", new U(new LinkedHashMap<String, Object>() { {
408+
put("name1", "one");
409+
put("name2", "two");
410+
} }).map().get().toString());
411+
assertEquals("{name1=one, name2=two}", new com.github.underscore.lodash.U(
412+
new LinkedHashMap<String, Object>() { {
413+
put("name1", "one");
414+
put("name2", "two");
415+
} }).map().get().toString());
416+
}
417+
389418
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,6 +1035,7 @@ public void main() {
10351035
U.of(new String[] {});
10361036
U.of(new int[] {});
10371037
U.of("");
1038+
U.of(new LinkedHashMap<String, Object>());
10381039
}
10391040

10401041
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)