0

如何在下面的示例中获取时间窗口的数量?目前它说有 2 个时间窗口,虽然有 3 个时间窗口,每个时间窗口由打开和关闭时间定义。

    Map<String, String> _timeWindows = new HashMap<String, String>();
    _timeWindows.put("open", "123");
    _timeWindows.put("close", "124");
    _timeWindows.put("open", "523");
    _timeWindows.put("close", "524");
    _timeWindows.put("open", "823");
    _timeWindows.put("close", "824");

    System.out.println(_timeWindows.size());
4

4 回答 4

1

键在所有地图中都是唯一的。

如果您想使用同一个键添加多个值。使用多图

 MultiMap timeWindows = new MultiValueMap();
        timeWindows.put("open", "123");
        timeWindows.put("close", "124");
        timeWindows.put("open", "523");
        timeWindows.put("close", "524");
        timeWindows.put("open", "823");
        timeWindows.put("close", "824");

        System.out.println("timeWindows : "+timeWindows);

输出 :timeWindows : {open=[123, 523, 823], close=[124, 524, 824]}

于 2013-09-06T10:21:23.377 回答
1

HashMap 包含唯一键。因此,当插入一个已经存在的新键时,它会覆盖它的对应值。因此,您的地图目前只有 2 个键值对。

鉴于您的问题,我想您需要一个Window类,类型为enum,值为字符串:

class Window {
    private String value;
    private WindowType type;

    enum WindowType {
        OPEN, CLOSED;
    }

    // constructor, getters.
}

然后根据您的要求维护一个Set<Window>或。List<Window>

如果您的值表示时间,那么您应该将其真正存储为时间,而不是字符串。我建议使用Joda Time

于 2013-09-06T10:21:29.327 回答
0

HashMap 中的键是唯一的。它将只有这些值:

_timeWindows.put("open", "823");
_timeWindows.put("close", "824");
于 2013-09-06T10:20:29.600 回答
0

由于键在Map您多次“打开”和“关闭”时是唯一的,因此它只会覆盖旧值并保持不变key。所以,正确地它只有两个元素keys:“open”,“close”。

于 2013-09-06T10:38:00.440 回答