繁体   English   中英

将两个数组列表的值存储在动态3维数组上

[英]Storing the values of two array lists on a dynamic 3 dimensional array

我有以下数据,这些数据显示了有人打开和关闭房间里的灯光时的确切时间和日期(存储在2个数组列表中):

  1. 2015-11-09T10:04:22 1
  2. 2015-11-09T11:45:14 0
  3. 2015-11-09T11:45:32 1
  4. 2015-11-09T15:13:56 0
  5. 2015-11-10T10:17:17 1
  6. 2015-11-10T11:20:04 0
  7. 2015-11-10T12:28:41 1
  8. 2015-11-10T13:04:46 0
  9. 2015-11-10T13:05:48 1
  10. 2015-11-10T13:35:15 0
  11. 2015-11-11T13:10:04 1
  12. 2015-11-11T15:46:18 0

第一个数组列表包含日期时间,第二个数组列表包含显示有人打开/关闭灯的值。

我想将数据分类为动态的三维数组,其中日期(无时间)将是关键,对于每个日期,我可以存储观察到变化的时间以及变化的类型(在此为0或1)案件)。

我应该使用哪种类型的数据结构? 我希望得到一些指导。

SQL表也可以作为您的选择。

您对日期过滤,时间排序和检测开/关的要求得到满足。

想到的数据结构是LinkedListArrayList 在这里,您有两个选择。

  1. 如果知道要排序的日期数,则LinkedList array就足够了。

  2. 如果您不知道要排序的日期数,则使用LinkedListArrayList

我认为地图是您使用案例的理想容器。 该地图将日期作为关键,并且创建SwitchEvent类(保持时间和打开/关闭开关状态)允许使用List来存储每天的事件。

Map<LocalDate, List<SwitchEvent>> eventContainer

用法示例如下:

public class LightSwitchMain {

public static void main(String[] args) {

    Map<LocalDate, List<SwitchEvent>> eventContainer = new HashMap<>();

    // Example of a light switch OFF on Jan 1, 2016 at 9:45)
    LocalDate eventDate1 = LocalDate.of(2016, 1, 1);
    SwitchEvent event1 = new SwitchEvent(LocalTime.of(9, 45), 0);

    addSwitchEvent(eventContainer, eventDate1, event1);

    // Light goes on
    SwitchEvent event2 = new SwitchEvent(LocalTime.of(9, 55), 1);
    addSwitchEvent(eventContainer, eventDate1, event2);

}

static void addSwitchEvent(Map<LocalDate, List<SwitchEvent>> eventContainer, LocalDate eventDate, SwitchEvent event) {
    List<SwitchEvent> dayEvents = eventContainer.get(eventDate);
    if (dayEvents == null) {
        dayEvents = new ArrayList<SwitchEvent>();
        eventContainer.put(eventDate, dayEvents);
    }
    dayEvents.add(event);
}

static class SwitchEvent {
    final LocalTime eventTime;  // Time of the light switch
    final int switchState;      // 0=off, 1=on
    public SwitchEvent(LocalTime eventTime, int switchState) {
        this.eventTime = eventTime;
        this.switchState = switchState;
    }
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM