我有一个像这样的 JSONArray (org.json):
[
{ "a": "a" },
{ "b": "a" },
{ "c": "a" },
{ "d": "a" },
{ "e": "a" },
{ "f": "a" },
{ "g": "a" }
]
我想删除所有JSONObject
s that do not有钥匙a
。除了我幼稚的方法之外,还有更好的方法吗?
Iterator objects = jsonArray.iterator();
while (objects.hasNext()) {
Object o = objects.next();
if (o instanceof JSONObject && !((JSONObject) o).has("a")) {
objects.remove();
}
}
预期输出:
[{"a": "a"}]
如果您正在寻找功能性风格的解决方案,您可以将Iterator
into a Stream
然后做你想做的事。
功能解决方案之一:
JSONArray newJsonArray =
StreamSupport.stream(jsonArray.spliterator(), false)
.filter(JSONObject.class::isInstance)
.map(JSONObject.class::cast)
.filter(j -> j.has("a"))
.collect(collectingAndThen(toList(), JSONArray::new));
Note:上面的解决方案没有修改原来的JSONArray
。遵循函数式编程的原则,人们应该更喜欢收集到一个新的对象中,而不是修改现有的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)