计算Java中每小时发生的次数

时间:2019-04-08 21:06:46

标签: java algorithm

首先,对我的英语不好的人感到抱歉,希望您能理解我

我看不到每小时如何恢复我的对象计数。 希望您能帮助我找到有关我的问题的更多信息。

我有一个任务对象,其中包含一个任务列表,每个对象都具有该属性 STRING名称 STRING时间(hhmmss格式)

这是一个示例:

0:姓名1 102101

1:name2 102801

2:名称3 104801

3:名称4 110501

4:名称5 120301

我希望我可以做一个数组,让我计算每小时的任务数量

在此示例中,我将:

10 => 3

11 => 1

12 => 1

我不知道你是否明白我想要得到的东西:)

如果您有小曲目,我会感兴趣

谢谢你读我!

祝你晚上好

1 个答案:

答案 0 :(得分:1)

TL; DR

  • 如前所述,您可能想使用带有String键的HashMap来反映 count <的 hour Integer值/ em>(每小时的任务数)。
  • 由于您要处理小时,也就是说您最多可以使用24小时,因此您也可以将HashMap替换为Array的24个项目。

Mission

基本上,这里只需要time属性的 getter 。如果您觉得不错,还可以添加一个getHour,它将返回小时数,而不是整个time字符串。

class Mission {
    private String name;
    private String time;
    Mission(String name, String time) {
        this.name = name;
        this.time = time;
    }

    String getHour() {
        // This gives us the 2 first characters into a String - aka the "hour"
        return time.substring(0, 2);
    }
}

使用HashMap

我们希望将每小时计数保留在HashMap中。因此,我们将遍历missionsList,对于每个项目,我们将获取其count,然后对其进行递增。

如果hour不在HashMap中,我们通常会收到null。为了以最少的样板处理问题,我们将使用getOrDefault方法。我们可以这样称呼map.getOrDefault("10", 0)。这将返回第10小时的任务计数,如果该计数还不存在(这意味着我们尚未将其添加到地图中),我们将收到0而不是null。代码将如下所示:

public static void main(String[] args) {
    // This will built our list of missions
    List<Mission> missionsList = Arrays.asList(
            new Mission("name1", "102101"),
            new Mission("name2", "102801"),
            new Mission("name3", "104801"),
            new Mission("name4", "110501"),
            new Mission("name5", "120301")
    );

    // This map will keep the count of missions (value) per hour (key)
    Map<String, Integer> missionsPerHour = new HashMap<>();

    for (Mission mission : missionsList) {
        // Let's start by getting the hour,
        // this will act as the key of our map entry
        String hour = mission.getHour();

        // Here we get the count of the current hour (so far).
        // This is the "value" of our map entry
        int count = missionsPerHour.getOrDefault(mission.getHour(), 0);

        // Here we increment it (by adding/replacing the entry in the map)
        missionsPerHour.put(hour, count + 1);
    }

    // Once we have the count per hour,
    // we iterate over all the keys in the map (which are the hours).
    // Then we simply print the count per hour
    for (String hour : missionsPerHour.keySet()) {
        System.out.println(String.format(
            "%s\t=>\t%d", hour, missionsPerHour.get(hour)
        ));
    }
}