2017-08-03 101 views
1

建立以下數據結構數據結構來保存,後來合併稀疏數據

M     M 
A1  A2  A3  A4  A5 
a     b     c 
a     b   d   
a   e  b   
a   f  b 

我的數據看起來就像下面需要的建議。標記爲M的列一起構成一個獨特的行。現在我應該可以讀取一條csv行並向上面的數據結構添加一行。如果我再次遇到相同的唯一行,我需要以某種方式合併相同的唯一行,並且最後一個相同的唯一行將贏得並繼承缺失值的值。

像上述例子

我有其是相同的唯一的行,因爲所有的字段標有M是相同的多個行。因此,從上表的最後表應該像下面

M     M 
A1  A2  A3  A4  A5 
a  f   b   d  c 

我想知道是否有任何數據結構持有這樣的結構?我不想重新創造新的?另外,如果我可以通過一些地圖和列表組合來實現這一點。標題(A1,A2,A3)是動態的,並且是未知的。我使用csv閱讀器從CSV讀取一行。

回答

0

可以使用HashMap,其中鍵是所有M列的連接。唯一的技巧是使用不能出現在任何M列中的連接分隔符,以避免由於一個或多個M列具有空值而導致的問題。

正如你從CSVReader獲取數據,你可以這樣做:

HashMap<String, ArrayList<String>> hm = new HashMap<String,ArrayList<String>>(); 
while (csvreader.hasNext()) { 
    String line = csvreader.lineReader().readLine(); 
    String[] fields = csvreader.parser.parseLine(line); 
    String key = fields[0] + ":" + fields[2]; 
    ArrayList<String> exists = hm.get(key); 
    if (exists == null) 
     hm.put(key, new ArrayList<String>(Arrays.asList(fields))); 
    else 
     for (int i=0; i<fields.length; i++) // works only if lines are homogeneous 
      if (fields[i] != null && fields[i].length() > 0) 
      exists.set(i, fields[i]); // set values only if they're not null 
}