我收到一个填充了数据的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"));
}
答案 0 :(得分:2)
据推测,您可以从DbDate
对象中提取小时,无论是什么。将其转换为24小时。如果你不能Calendar
肯定可以为你做这件事。
将小时提取为0 - 23,将其用作Map
的密钥,在String
中存储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
一个循环,创建并插入{ {1}}每小时0 - 23。
答案 1 :(得分:1)
将所有内容存储在HashMap<Date,String>
中。 Date
是关键,标识“组”,String
是您的ingame_name
。
您可以先用所有空组填充HashMap
,然后迭代它们。
答案 2 :(得分:0)
有。使用数据库。这正是内存中SQLite数据库的用途。只需创建一个SQLiteOpenHelper
对象,将null
作为name
传递,您将获得一个内存中,仅此进程的SQL数据库。
然后,只需将所有数据转储到表中并运行类似于SELECT * FROM data ORDER BY time(date_field) ASC
的内容。有关详细信息,请参阅Date & Time functions。
您当然可以在SQLite端进行更多处理,以便用数据处理语言表达。
或者,您当然可以创建Comparator
并使用Collections.sort()
来达到类似的效果。