java - 用于保存并随后组合稀疏数据的数据结构

标签 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 行并向上述数据结构添加一行。如果我再次遇到相同的唯一行,我需要以某种方式合并相同的唯一行,最后一个相同的唯一行将获胜并继承缺失值的值。

就像上面的例子

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

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

我想知道是否有任何数据结构来保存这样的结构?我不想重新发明新的?另外,如果我可以通过一些 map 和列表组合来实现这一点。 header (A1、A2、A3)是动态的且未知。我使用 csv 阅读器从 CSV 中读取一行。

最佳答案

您可以使用 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
}

关于java - 用于保存并随后组合稀疏数据的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45492299/

相关文章:

java - 渲染 JSP 页面后设置 ng-model

javascript - 检查二叉搜索树是否有效 javascript

java - DateTimeFormatter 基于周年的差异

java - 从一个列表中提取多个字段并将其保存到另一个列表或相同类型的新列表中。在 java 8

java - 记录密码查询

java - 使用 Javamail API 将邮件从雅虎 ID 发送到其他电子邮件 ID

java - Edittext 只允许字母(以编程方式)

java - Java 中的电子邮件验证不使用正则表达式

Python,无法从递归函数附加到列表

java - 归零二