要保留并稍后组合稀疏数据的数据结构

时间:2017-08-03 18:49:20

标签: java data-structures java-8

需要建议以构建以下数据结构

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

我的数据如下所示。标记为M的列一起构成唯一的行。现在我应该能够读取csv行并在上面的数据结构中添加一行。如果我再次遇到相同的唯一行,我需要以某种方式合并相同的唯一行,并且最后一个相同的uniqe行将获胜并继承缺失值的值。

与上面的例子一样

我有多行是相同的唯一行,因为标有M的所有字段都相同。所以上表中的最终表格如下所示

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

如果有任何数据结构来保存这样的结构,我想知道什么?我不想重新发明新的?此外,如果我可以通过一些地图和列表组合实现这一点。标题(A1,A2,A3)是动态的,未知。我使用csv reader从CSV读取了一行。

1 个答案:

答案 0 :(得分: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
}