2017-08-03 64 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 
}