Java 当每个文件的日期不同时,如何遍历CSV文件中的日期/时间列

Java 当每个文件的日期不同时,如何遍历CSV文件中的日期/时间列,java,csv,Java,Csv,因此,CSV文件中日期/时间列的格式如下所示: csv[0] csv[1] 2014-06-02T00:00:00 someNumericalData 2014-06-03T00:00:00 etc... 根据我使用的文件,可能是2013年、2012年等。我希望能够在另一列中获得每天数据的数字数据。因此,2014-06-02的所有数字数据将在一个数组/列表中,然后当我到达下一个日期时,我将数据存储在一个新的

因此,CSV文件中日期/时间列的格式如下所示:

csv[0]                      csv[1]      
2014-06-02T00:00:00         someNumericalData
2014-06-03T00:00:00         etc... 
根据我使用的文件,可能是2013年、2012年等。我希望能够在另一列中获得每天数据的数字数据。因此,2014-06-02的所有数字数据将在一个数组/列表中,然后当我到达下一个日期时,我将数据存储在一个新的数组/列表中

我可以通过CSV进行迭代并获得数据,这只是检查困扰我的日期。如果有人能帮助我,或者为我指明正确的方向,告诉我如何解决这个问题,那就太好了。
注意:只有数据是相关的,时间无关紧要。一种方法是使用映射对同一日期的值进行分组。您可以只使用HashMap,或者更好地使用TreeMap,以便按日期对条目进行排序

我不想费心阅读CSV输入,所以我将把一些示例数据放到另一个不需要排序的映射中。使其适应您的CSV方法应该很简单

Map<String, Double> ungroupedCsv = new TreeMap<>();
ungroupedCsv.put("2014-06-02T00:01:00", 1.1);
ungroupedCsv.put("2014-06-02T00:02:00", 1.2);
ungroupedCsv.put("2014-06-02T03:00:00", 1.3);
ungroupedCsv.put("2014-06-02T04:20:00", 1.4);
ungroupedCsv.put("2014-06-03T00:00:01", 2.1);
ungroupedCsv.put("2014-06-03T00:01:00", 2.2);
ungroupedCsv.put("2014-06-03T00:11:00", 2.3);
ungroupedCsv.put("2014-06-03T01:10:00", 2.4);
分组的日期存储在映射中,将上述格式的仅日期字符串映射到原始列表中的数值列表

Map<String, List<Double>> grouped = new TreeMap<>();

目前还不清楚检查日期的哪个方面是个问题。您是否发现解析字符串很困难?看看SimpleDataFormat,或者理想情况下使用Joda Time…我只是不确定如何进行迭代,以及如何知道何时到达新的一天。我从未听说过Joda Time,但它看起来非常有用,所以我将尝试使用它。谢谢,你能不能提供一个扩展的例子来说明你的意思,我想能够在另一列中得到每天数据的数值数据。因此,2014-06-02的所有数字数据将在一个数组/列表中,然后当我到达下一个日期时,我将数据存储在一个新的数组/列表中?CSV文件中有多个列。日期和时间在第一列0中,我对浮动值感兴趣,例如,在另一列5中的0.765。目前,我可以浏览CSV文件,并将一列中的所有双值放入自己的列表中。我想做的是,在自己的列表中列出每天的所有值。因此,2014-06-02的所有值都将在它们自己的列表中。您可以使用HashMap Day->浮动列表。只需从日期中提取日期,例如使用SimpleDateFormat并使用HashMap获取要附加到的适当日期列表。顺便说一句,您的示例令人困惑,因为它每天只显示一个值。感谢您对Tobias的全面回答。不幸的是,我的输出与上面的表单不匹配。所有结果如下{2014-06-02=[0.1234]}{2014-06-02=[0.5678]}{2014-06-02=[0.9101]}唯一不同的是我在地图上添加了必要的数据,比如:forint I=0;iMap<String, List<Double>> grouped = new TreeMap<>();
for (String key : ungroupedCsv.keySet()) {
    String date = dateOnly.format(dateTime.parse(key));
    if (! grouped.containsKey(date)) {
        grouped.put(date, new ArrayList<Double>());
    }
    grouped.get(date).add(ungroupedCsv.get(key));
}
System.out.println(grouped);
{2014-06-02=[1.1, 1.2, 1.3, 1.4], 2014-06-03=[2.1, 2.2, 2.3, 2.4]}