2013-12-01 3 views
1

Я немного перегружен и нуждаюсь в вашем совете.Хранение данных в hashmap

Я получаю некоторые строки из базы данных с помощью JSON и сохраняя их в hashmap, я не могу понять, как правильно хранить родителя и ребенка.

// looping through All JSON array 
       for (int i = 0; i < data.length(); i++) { 
        JSONObject c = data.getJSONObject(i); 

        // Storing each json item in variable 

        String city = c.getString(TAG_CITY); 
        String street = c.getString(TAG_STREET); 



         HashMap<String, List<String>> ExpListData = new HashMap<String, List<String>>(); 
         ExpListData.put(key, value) 



       } 

Я не могу найти способ сохранить весь адрес улицы в разных городах. Я знаю, что я могу создать List<String> для всех улиц в одном городе, но это не вариант, потому что база данных может иметь город, о котором я не знаю

+0

вы можете использовать структуру, как это ... List >> –

+0

Не могли бы вы дать мне пример, с этой структурой? Потому что насколько я вижу, мне понадобится другой список для улицы каждого города? – whiteLT

ответ

1

Ваш ExpListData отбрасывается на каждый цикл. Если вы хотите карту с городом, как ключ и все улицы этого города, как использовать значение что-то вроде этого:

// looping through All JSON array 
HashMap<String, List<String>> ExpListData = new HashMap<String, List<String>>(); 
for (int i = 0; i < data.length(); i++) { 
    JSONObject c = data.getJSONObject(i); 

    // Storing each json item in variable 
    String city = c.getString(TAG_CITY); 
    String street = c.getString(TAG_STREET); 

    List<String> streets = ExpListData.get(key); 
    if (streets == null) { 
     streets = new ArrayList<String>(); 
     ExpListData.put(key, streets); 
    } 
    streets.add(value); 
} 

ExpListData будет содержать карту с каждым городом, как ключ. Значение будет списком всех улиц, связанных с этим городом.

Линия List<String> streets = ExpListData.get(key); получает уже введенные улицы для фактического города. Это необходимо, потому что в противном случае значение ключа будет переопределяться каждый раз и не сочетаться с существующими значениями.

Если есть вероятность, что вы получаете улицу 2 раза за один город, вы можете использовать HashSet<String> вместо ArrayList<String>. Кроме того, для получения желаемого результата (в зависимости от ваших данных) может потребоваться нормализация имени города (то есть toLowerCase().trim()). Пожалуйста, имейте в виду, что имя города не уникально (т. Е. Я думаю, что в Америке более одного Спрингфилда). возможно, используя сочетание города и почтовый индекс будет лучше.

+0

Хорошо, я попробую это, но не будет ли 'street' хранить все улицы? Или делает' .get (key) 'что-то выделяет улицы для их города? – whiteLT

+0

Я мог бы объяснить, что '.get (key)' делает – whiteLT

+0

И что вы имели в виду здесь 'street.add (value);' потому что у меня нет этой переменной и вы можете видеть, что вы имели в виду. – whiteLT

Смежные вопросы