Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(金融)中将节拍转换为分钟的最佳方法_Java_Date_Finance_Java 8 - Fatal编程技术网

Java(金融)中将节拍转换为分钟的最佳方法

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

我有一个庞大的数据库,每天都包含一个文本文件,格式如下: “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”不是一个好的日期格式,它只是一个例子

如果你与一位同事一起工作,你会做得很好。该类表示一天中的某个时间

警告:如果要在内存中创建太多对象,则可能会引发

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])));