![](/img/trans.png)
[英]How to iterate through a CSV file with data organized by columns to make separate arrayLists of each column?
[英]How can I iterate through a Date/Time column in a CSV file when the dates are different for each file
因此,CSV文件中“日期/時間”列的格式如下所示:
csv[0] csv[1]
2014-06-02T00:00:00 someNumericalData
2014-06-03T00:00:00 etc...
根據我使用的文件,可能是2013、2012等。我希望能夠獲取每一天數據的另一列中的數值數據。 因此,2014-06-02的所有數值數據都將位於一個數組/列表中,然后當我遇到下一個日期時,我會將數據存儲在一個新的數組/列表中。
我可以遍歷CSV並獲得很好的數據,這只是檢查困擾我的日期。 如果有人可以幫助或指出正確的方向,以解決該問題,那就太好了。 (注意:僅數據相關,時間無關緊要)
您可以使用的一種方法是使用Map
對同一日期的值進行分組。 您可以只使用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);
接下來,我們需要兩種日期格式:一種是原始格式,帶有日期和時間,一種是僅帶有日期:
SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat dateOnly = new SimpleDateFormat("yyyy-MM-dd");
分組的日期存儲在Map
,將上述格式的僅日期字符串映射到原始列表中的數值列表。
Map<String, List<Double>> grouped = new TreeMap<>();
現在,我們可以迭代原始地圖(或CSV文件)中的所有條目,重新編碼日期格式,並將值添加到相應的日期列表中(或創建該列表(如果尚不存在))。
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]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.