2017-05-17 40 views
0

我正在用Java讀取任意數量的列和行的Excel文件。前兩列是不相關的,但以下列(成對兩列)是指數據實體屬性。每個實體都是相互關聯的,例如,我可以參考Cell E1並從Cell M1獲取數據。最好的方式來存儲與其他列相關的Excel行?

我應該在這種情況下使用哪種數據結構?順便說一下,我使用Apache POI從Excel文件中讀取數據。

由於一噸!

+0

我將每列存儲爲一個對象,並將列數據的列表/地圖放入每個列類中。然後我可以通過參考_nth_位置處的'column.list'來獲取每個單元格的數據。我不知道這是否是這樣做的最好方法。 – DCON

回答

0

如果您有一個標題行並且標題是唯一的,請將每行存儲爲一個Map,其中標題爲鍵,值爲單元格文本。這爲您的數據添加了上下文,並使您的行數據結構具有意義,並且可以使用,而無需傳遞從列號到標題名稱與其他消費者的行數據結構(此時可能是List)之間的映射。不過,這確實是以速度和內存爲代價的。

根據您解讀數據的方式,您可以在單元格爲空白/空白時在地圖中包含或排除條目。然後你將使用一個List來組織所有這些行。

如果您的數據結構需要知道單元格地址(或數字行和列),但不能只傳遞XSSFSheet對象(要麼隱藏您從其餘部分使用POI的事實應用程序,或者由於內存原因無法保持XLSX文件處於打開狀態),請使用List或Map來組織行。如果有一堆空白行,您不希望在列表中保存大量空值以保持列表索引和行號保持一致,那麼Map會更好。行數據結構可以是List,其中索引是單元格的列號,如果列很稀疏,則爲Map。

如果您想將標題和單元格文本捆綁在一起,則可以使用另一種路徑,即使用一種元組或對(例如org.apache.commons.lang3.tuple.Pair)。這些可以填入列表或地圖。

你一定要考慮你的這個數據結構的消費者是什麼,以及你如何優化結構以最大限度地減少通過你的數據結構進行搜索以提取相關性。 也許一個普通的舊的String[][]將工作...

你有沒有看過java.sql.ResultSet呢?這聽起來像你的數據遵循關係數據庫表結構。

如果你有一個上限或固定數量的列,我會推薦一個元組或一個namedtuple來存儲你的行內容,但它聽起來像你的數據比那更自由。

相關問題