首页 > 解决方案 > 如何在哈希图中使用日期作为键

问题描述

我想知道是否可以读取具有以下结构的文本文件

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...等等?即使有多个相同的日期,是否有可能在同一个日期/键中存储许多值?

标签: javadatehashmapkeystorage

解决方案


此答案假定您的文件不包含重复键,并且文件格式不需要验证。

您应该使用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);

LocalDateTimeLocalDate实现hashCodeand equals,所以我们根本不需要担心这个。


推荐阅读