在 Java 中将刻度转换为分钟的最佳方法(金融)

Best way to convert ticks to minuts in Java (finance)

我有一个庞大的数据库,其中每天包含一个具有以下格式的文本文件: "HH:mm:ss xxxx.xx" 每个交易日的几乎每一秒,所以我在每个文本文件中都有数千行。 我正在寻找将这些行转换为 HashMap 的最佳方法,其中每个键代表交易日的新分钟。

例如,我想写几行:

00:08:48    9819,9
00:09:10    9818,7
00:09:44    9819,9
00:09:51    9820,9
00:10:07    9822,1

在 HashMap 中看起来像这样:

myHashMap.put("00:09:00", 9818.7)

myHashMap.put("00:10:00", 9822.1)

PS :我知道“00:09:00”不是一个好的日期格式,它只是为了举例!

如果您正在使用 - Files#lines does a great job at that. The LocalTime class 表示一天中的时间。

警告:如果要在内存中创建太多对象,可能会抛出 OutOfMemoryError

Map<LocalTime, Double> map = Files.lines(Paths.get("D:\data.txt"))
                                  .map(x -> x.split(" "))
                                  .collect(Collectors.toMap(
                                               x -> LocalTime.parse(x[0]), 
                                               x -> Double.valueOf(x[1])));

对于特定的double格式,您可以使用以下

(Double)NumberFormat.getInstance(Locale.GERMANY).parse(x[1]))

货币

由于数据似乎是货币数据,BigDecimal 可能比 Double 更好。

Map<LocalTime, BigDecimal> map = Files.lines(Paths.get("D:\data.txt"))
                                  .map(x -> x.split(" "))
                                  .collect(Collectors.toMap(
                                               x -> LocalTime.parse(x[0]), 
                                               x -> new BigDecimal(x[1])));