java - 如何在哈希图中使用日期作为键
问题描述
我想知道是否可以读取具有以下结构的文本文件
1946-01-12;07:00:00;-1.3;G
1946-01-12;13:00:00;0.3;G
1946-01-12;18:00:00;-2.8;Y
1946-01-13;07:00:00;-6.2;G
1946-01-13;13:00:00;-4.7;G
1946-01-13;18:00:00;-4.3;Y
1946-01-14;07:00:00;-1.5;G
但是在哈希图中有更多的行,其中日期是键,值是-1.3, 0.3, -2.8, -6.2...
等等?即使有多个相同的日期,是否有可能在同一个日期/键中存储许多值?
解决方案
此答案假定您的文件不包含重复键,并且文件格式不需要验证。
您应该使用Map<LocalDateTime, Double>
,Map<LocalDate, Double>
来存储数据,具体取决于您是否需要时间部分:
Map<LocalDateTime, Double> map = new HashMap<>();
假设我们在一个循环中逐行读取文件直到文件末尾,刚刚读取的行存储在字符串line
中,我们可以这样解析该行:
String[] parts = line.split(";");
// the dates and times are all in ISO8601 format, so we can call "parse" directly
LocalDate date = LocalDate.parse(parts[0]);
LocalTime time = LocalTime.parse(parts[1]);
double number = Double.parseDouble(parts[2]);
LocalDateTime dateTime = LocalDateTime.of(date, time);
现在我们可以把它放在地图上:
map.put(dateTime, number);
LocalDateTime
并LocalDate
实现hashCode
and equals
,所以我们根本不需要担心这个。
推荐阅读
- cplex - 将 GPL 转换为 OPL 的提示
- java - 在 Java 中突出显示 JLabel 上的图像图标的一部分
- python - 使用python从类表结构中提取数据
- javascript - 如何恢复存储在 Cloud Firestore 中的时间 (HH: MM) 时间戳?
- sql - 在多边形中查找点会提供错误的结果
- python - python 3.7 安装是否会删除现有的 python 3.5 安装?
- c# - 将项目动态添加到其 DataSource 绑定到集合的 ListBox
- javascript - Charts JS:圆环图和隐藏每个数据集中特定数据索引的工具提示
- laravel - Laravel 过滤一对多关系
- r - 无法编辑刻度线标签