Skip to content

Commit 2486f30

Browse files
authored
Add U.remove(map, key).
1 parent 5e66d14 commit 2486f30

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,6 +1548,34 @@ public static <T> T set(final Map<String, Object> object, final String path, Obj
15481548
return baseGetAndSet(object, path, Optional.of(value));
15491549
}
15501550

1551+
@SuppressWarnings("unchecked")
1552+
public static Map<String, Object> remove(final Map<String, Object> map, final String key) {
1553+
Map<String, Object> outMap = newLinkedHashMap();
1554+
for (Map.Entry<String, Object> entry : map.entrySet()) {
1555+
if (!entry.getKey().equals(key)) {
1556+
outMap.put(entry.getKey(), makeObjectForRemove(entry.getValue(), key));
1557+
}
1558+
}
1559+
return outMap;
1560+
}
1561+
1562+
@SuppressWarnings("unchecked")
1563+
private static Object makeObjectForRemove(Object value, final String key) {
1564+
final Object result;
1565+
if (value instanceof List) {
1566+
List<Object> values = newArrayList();
1567+
for (Object item : (List) value) {
1568+
values.add(item instanceof Map ? remove((Map<String, Object>) item, key) : item);
1569+
}
1570+
result = values;
1571+
} else if (value instanceof Map) {
1572+
result = remove((Map<String, Object>) value, key);
1573+
} else {
1574+
result = value;
1575+
}
1576+
return result;
1577+
}
1578+
15511579
public static class FetchResponse {
15521580
private final boolean ok;
15531581
private final int status;

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,22 @@ public void xmlToJson() {
650650
U.replaceSelfClosingWithNull(map2);
651651
}
652652

653+
@Test
654+
public void removeMapKey() {
655+
Map<String, Object> map = U.newLinkedHashMap();
656+
map.put("-self-closing", "false");
657+
U.remove(map, "test");
658+
U.remove(map, "-self-closing");
659+
Map<String, Object> map2 = U.newLinkedHashMap();
660+
List<Object> list = U.newArrayList();
661+
list.add(U.newArrayList());
662+
list.add(U.newLinkedHashMap());
663+
map2.put("list", list);
664+
U.remove(map2, "test");
665+
map2.put("list", U.newLinkedHashMap());
666+
U.remove(map2, "test");
667+
}
668+
653669
@Test
654670
public void jsonToXml() {
655671
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<a></a>", U.jsonToXml("{\n \"a\": {\n }\n}"));

0 commit comments

Comments
 (0)