Java(金融)中将节拍转换为分钟的最佳方法
我有一个庞大的数据库,每天都包含一个文本文件,格式如下: “HH:mm:ss xxxx.xx” 几乎每一个交易日的每一秒,所以我在每个文本文件中都有数千行。 我正在寻找将这些行转换为HashMap的最佳方法,其中每个键代表交易日的一分钟 例如,我想写以下几行:Java(金融)中将节拍转换为分钟的最佳方法,java,date,finance,java-8,Java,Date,Finance,Java 8,我有一个庞大的数据库,每天都包含一个文本文件,格式如下: “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中看起来像这样: myHash
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”不是一个好的日期格式,它只是一个例子 如果你与一位同事一起工作,你会做得很好。该类表示一天中的某个时间
警告:如果要在内存中创建太多对象,则可能会引发
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])));
货币的 由于数据似乎是货币数据,
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])));
Map Map=Files.line(path.get(“D:\\data.txt”))
.map(x->x.split(“”)
.collect(collector.toMap)(
x->LocalTime.parse(x[0]),
x->新的大十进制(x[1]);
听起来更像是SQL数据库的作业,之后您可以使用with grouping创建SELECT查询。无论如何,当你使用java注释时,HashMap不会用相同的键存储多个条目。如果你认为你可以在每分钟做一个比第一个滴答声更多的东西,你可以考虑使用ESPER来获取一个简单的例子。这是他们的CSV源文件,您可以使用类似于SQL的流式语法执行更高级的操作<代码>从SensorEvent中选择first(*)、last(*)。win:time(10秒)但如果您不需要更多内容,那么这可能会有点过头。可以通过先拆分字符串,然后制作地图来提高效率。例如,.map(line->line.split(“”)
在.line(…)
之后。另外,考虑到那里的数据使用逗号作为小数位数,(Double)NumberFormat.getInstance(Locale.GERMANY)。parse(x[1])可能更适合映射中的值。回答很好,但为了准确起见,我将用替换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])));