Удаление дублей в json array java

458
08 августа 2017, 14:57

Имеется JSON файл с информацией о более чем 26 тыс. аэропортов с такими данными:

...},
        {
            "latitude": 1.8573000000000002,
            "longitude": -76.08563055555555,
            "proc_runways": 2,
            "airportCode": "SKPI",
            "airportName": "CONTADOR/HUILA",
            "countryCode": "COL",
            "FIRcode": "SKED",
            "FIRname": "BOGOTA",
            "region": "SAM",
            "elevation": 1369,
            "is_international": true,
            "iatacode": "PTX",
            "countryName": "Colombia"
        },
        {"latitude": 1.8573000000000002,
            "longitude": -76.08563055555555,
            "proc_runways": 2,
            "airportCode": "SKPI",
            "airportName": "CONTADOR/HUILA",
            "countryCode": "COL",
            "FIRcode": "SKED",
            "FIRname": "BOGOTA",
            "region": "SAM",
            "elevation": 1369,
            "is_international": true,
            "iatacode": "PTX",
            "countryName": "Colombia"
},{...

Но некоторые из записей повторяются. Я могу их найти по полю airportCode, потому что оно уникально. Пробовал онлайн сервисы для поиска и удаления дубликатов, но размер файла около 8 MB, и это оказалось слишком много для них.

Можете посоветовать какой нибудь быстрый способ для удаления дубликатов из JSON массива в Java?

Answer 1

Не вижу великой проблемы, например что-то типа такого:

//бин описывающий поля объекта Airport
class Airport {
   private double latitude;
   private double longitude;
   private int proc_runways;
   private String airportCode;
   //blah-blah
}

//декларируем тип для Gson
Type AIRPORT_TYPE = new TypeToken<List<Airport>>(){}.getType(); 
//аллоцируем Gson
Gson gson = new Gson();
//открываем файл с Json
JsonReader reader = new JsonReader(new FileReader(filename));
//парсим в список
List<Airport> airports = new Gson().fromJson(reader, AIRPORT_TYPE);
//аллоцируем мап
Map<String, Airport> mapAirports=new Map();
//засовываем список в мап с ключом airportCode
for(Airport airport:airports) {
   mapAirports.put(airport.getAirportCode(), airPort);
}
//получаем из map обратно список без дублей
airportsWithNoDuplicates=new ArrayList<Airport>(mapAirports.values());

P.S. Как всегда дисклеймер: я не компилятор - писал на коленках, здесь очерчена только идея, code-polish на вашей стороне.

READ ALSO
vk api авторизация

vk api авторизация

При попытке отправки запроса на code в ответе нет заголовка "location"Находил рекомендацию отключить следование редиректу

423
Как запустить клиент и подключиться к серверу в AsyncTask?

Как запустить клиент и подключиться к серверу в AsyncTask?

Запускаю на компьютере через командную строку сервер с портом 6666Подскажите, как я могу к нему подключиться, нажав на кнопку в эмуляторе? У меня...

426
Мониторинг подключений к серверу на Java

Мониторинг подключений к серверу на Java

Мне нужно чтобы программа получала список всех IP адресов, обращающихся к моему серверу, и я мог получить этот списокРаботаю в линуксовом...

330
Проблема с кодировкой vkontakte-api

Проблема с кодировкой vkontakte-api

Пытаюсь отправить сообщение через vkapi messagessend

358