2013-08-09 4 views
1

Я получаю объект json, заполненный данными, и одна из задач с этими данными - группировать время вместе.Более быстрый метод группирования

Например, если GAME_TIME - 12:15, он должен находиться под заголовком 12 PM.

Я придумал решение, но его чудовище и будет трудно отлаживать, должен быть лучший способ сделать это.

DbDate = DateFormatter.parse(json_data.getString("GAME_TIME")); 

if (DbDate.compareTo(DateFormatter.parse("12:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("1:00 AM")) < 0) { 
    Users12AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("1:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("2:00 AM")) < 0) { 
    Users1AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("2:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("3:00 AM")) < 0) { 
    Users2AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("3:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("4:00 AM")) < 0) { 
    Users3AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("4:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("5:00 AM")) < 0) { 
    Users4AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("5:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("6:00 AM")) < 0) { 
    Users5AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("6:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("7:00 AM")) < 0) { 
    Users6AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("7:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("8:00 AM")) < 0) { 
    Users7AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("8:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("9:00 AM")) < 0) { 
    Users8AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("9:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("10:00 AM")) < 0) { 
    Users9AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("10:00 AM")) == 0 || DbDate.compareTo(DateFormatter.parse("11:00 AM")) < 0) { 
    Users10AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("11:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("12:00 PM")) < 0) { 
    Users11AM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("12:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("1:00 PM")) < 0) { 
    Users12PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("1:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("2:00 PM")) < 0) { 
    Users1PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("2:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("3:00 PM")) < 0) { 
    Users2PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("3:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("4:00 PM")) < 0) { 
    Users3PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("4:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("5:00 PM")) < 0) { 
    Users4PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("5:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("6:00 PM")) < 0) { 
    Users5PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("6:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("7:00 PM")) < 0) { 
    Users6PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("7:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("8:00 PM")) < 0) { 
    Users7PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("8:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("9:00 PM")) < 0) { 
    Users8PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("9:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("10:00 PM")) < 0) { 
    Users9PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("10:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("11:00 PM")) < 0) { 
    Users10PM.add(json_data.getString("IN_GAME_NAME")); 
} else if (DbDate.compareTo(DateFormatter.parse("11:00 PM")) == 0 || DbDate.compareTo(DateFormatter.parse("12:00 PM")) < 0) { 
    Users11PM.add(json_data.getString("IN_GAME_NAME")); 
} 
+1

Вы когда-нибудь слышали о «карте»? 'Map >' –

+2

просто комментируя сам код, а не вопрос: пожалуйста, используйте имена переменных нижнего регистра для объектов !! если какой-либо разработчик читает Users2PM.add(), они думают о статических методах, которые, надеюсь, здесь не так :) –

ответ

1

Хранить все в HashMap<Date,String>. Date - это ключ, идентифицирующий «группу», а String - ваш ingame_name. Вы можете сначала заполнить HashMap всеми пустыми группами, а затем перебрать их.

+0

Я решил использовать это решение, потому что у меня уже есть код для итерации по карте. Хотя все эти предложения - отличные идеи. –

0

Существует. Используйте базу данных. Это именно то, для чего предназначены базы данных SQLite в памяти. Просто создайте объект SQLiteOpenHelper, передав null как name, и вы получите базу данных SQL, содержащуюся в памяти.

Затем просто сбрасывайте все данные в таблицу и запускайте что-то похожее на SELECT * FROM data ORDER BY time(date_field) ASC. См. Date & Time functions для получения дополнительной информации.

Вы можете, конечно, сделать намного больше обработки на стороне SQLite, чтобы вы выразили его на языке, предназначенном для обработки данных.

В качестве альтернативы вы можете создать Comparator и использовать Collections.sort() для достижения аналогичного эффекта.

2

Предположительно вы можете извлечь час из своего объекта DbDate, что бы это ни было. Преобразуйте его в 24 часа. Если вы не можете Calendar, конечно, можете сделать это за вас.

Извлечь час как 0 - 23, использовать его в качестве ключа для Map, сохранить список String s в Map. Готово.

Map<Integer, List<String>> myMap = new HashMap<Integer, List<String>>(); 
... 

// `hour` here represents the 24hr value described above 
List<String> list = myMap.get(hour); 
if (null == list) 
{ 
    // There's no List for this hour - create and insert it. 
    list = new ArrayList<String>(); 
    myMap.put(hour, list); 
} 
list.add(json_data.getString("IN_GAME_NAME")); 

Если вы хотите, чтобы пропустить null проверочного бита и быть гарантировано, что есть List за каждый час, предварительно заполнить Map с петлей, создание и вставив List<String> за каждый час 0 - 23

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