Retire todos los elementos excepto uno de JSONArray de JSONObjects

Harshal Parekh:

Tengo un JSONArray (org.json) así:

[
    { "a": "a" },
    { "b": "a" },
    { "c": "a" },
    { "d": "a" },
    { "e": "a" },
    { "f": "a" },
    { "g": "a" }
]

Me gustaría eliminar todos los JSONObjects que no tienen la clave a. ¿Hay una mejor manera de hacerlo que no sea mi enfoque ingenuo?

Iterator objects = jsonArray.iterator();
while (objects.hasNext()) {
    Object o = objects.next();
    if (o instanceof JSONObject && !((JSONObject) o).has("a")) {
        objects.remove();
    }
}

Rendimiento esperado:

[{"a": "a"}]
ETO:

Si usted está buscando una solución de estilo funcional, se puede envolver el Iteratoren una Streamy luego hacer lo que quiera.

Una de las soluciones funcionales:

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));

Nota : La solución anterior no modifica el original JSONArray. Siguiendo los principios de una programación funcional debe preferir recoger en un nuevo objeto en vez de modificar el existente.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=410243&siteId=1
Recomendado
Clasificación