Как отфильтровать список по значению ключа из JsonArray - PullRequest
1 голос
/ 12 апреля 2019

Как мне отфильтровать список на основе значений JSONArray?

JSONArray имеет элементы в простой структуре json с ключом и значениями.

JSONArray из пакета org.json и использует эту зависимость

             <dependency>
               <groupId>org.json</groupId>
               <artifactId>json</artifactId>
               <version>20180130</version>
            </dependency>

Строковый ответ, который я получаю при достижении конечной точки, анализируется таким образом

   String response = [{"ID": 1,"updatedAt": "2019-04-12T09:09:48"},{"ID": 2,"updatedAt": "2019-04-12T09:09:48"}      
   JSONArray jsonArray =  new JSONArray(response)

Список, который я хочу отфильтровать, состоит из списка строк json List<String> eventDataSetList

Теперь, как я могу отфильтровать список, используя значение ключа ID из jsonArray лучше, чем этот?

Вот что я сделал до сих пор, но я действительно не хочу использовать вложенный цикл:

Map<Object, String> filteredEvents = new HashMap<>();
for (String event : eventDataSetList) {
    for (Object obj : jsonArray) {
        JSONObject jsonObject = (JSONObject) obj;
        if (event.contains(jsonObject.getString("ID"))) {
            filteredEvents.put(jsonObject, event);
        }
    }
}

1 Ответ

0 голосов
/ 12 апреля 2019

Вы можете использовать API Java Stream с этим:

Map<JSONObject, String> filteredEvents = StreamSupport.stream(jsonArray.spliterator(), false).map(o -> (JSONObject) o)
        .flatMap(o -> eventDataSetList.stream().filter(e -> e.contains(o.getString("ID"))).map(e -> new AbstractMap.SimpleEntry<>(o, e)))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Это создает поток, который перебирает все элементы в вашем массиве JSON и находит все события, соответствующие условию event.contains(jsonObject.getString("ID")). Наконец они собраны на карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...