Java - итерация списка карт в зависимости от условия - PullRequest
0 голосов
/ 06 февраля 2019

У меня следующая структура json

{
  "CreateDtTm": "2019-02-06T10:34:06",
  "AcftType": "Event",
  "EqpCd": "73Y",
  "TailNbr": "N26226",
  "docType": "TailClndr",
  "TailActvy": [
    {
      "FlightLeg": {
        "DepDlyMin": "1",
        "TaxiInMin": "0",
        "AccumTm": -99000000,
        "Indicators": {
          "In": "0",
          "ArrRtbl": "0",
          "Cncl": "1"
        }
      }
    },
    {
      "FlightLeg": {
        "DepDlyMin": "1",
        "TaxiInMin": "0",
        "AccumTm": -99000000,
        "Indicators": {
          "In": "1",
          "ArrRtbl": "0",
          "Cncl": "0"
        }
      }
    }    
  ]
}

Мне нужно перебрать карту и извлечь «FlightLeg» с «Indicators» «IN» как 1. Традиционным способом я реализовал, как показано ниже:

List<LinkedHashMap<String, Object>> tailActiviyList = (List<LinkedHashMap<String, Object>>) aircraftRoutingInfoMap
        .get("TailActvy");

for (HashMap<String, Object> flightActivityMap : tailActiviyList) {
    if (flightActivityMap.containsKey("FlightLeg")) {
        HashMap<String, Object> flightLegMap = (HashMap<String, Object>) flightActivityMap.get("FlightLeg");
        HashMap<String, Object> flightIndicators = (HashMap<String, Object>) flightLegMap.get("Indicators");

        if(flightIndicators.get("In").equals("0") && flightIndicators.get("Cncl").equals("0"))
        {
            aircraftRoutingList.add(flightLegMap);
        }
    }
}

Может ли это быть реализовано с помощью Java Stream.

1 Ответ

0 голосов
/ 06 февраля 2019

Хотя концептуально то, что вы смотрите из потоков, это использование filter и map:

List<Map<String, Object>> aircraftRoutingList = tailActiviyList.stream()
        .filter(f -> f.containsKey("FlightLeg")
                && ((Map<String, Object>) ((Map<String, Object>) f.get("FlightLeg")).get("Indicators")).get("In").equals("0")
                && ((Map<String, Object>) ((Map<String, Object>) f.get("FlightLeg")).get("Indicators")).get("Cncl").equals("0")
        )
        .map(m -> (Map<String, Object>) m.get("FlightLeg"))
        .collect(Collectors.toList());

Тем не менее, просто взглянув на это, вы сначала предложите использовать классы для моделирования вашихобъекты, а затем еще больше улучшить читаемость кода.

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