更快的分组时间方法

时间:2013-08-09 19:02:53

标签: java

我收到一个填充了数据的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"));
}

3 个答案:

答案 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()来达到类似的效果。