需要构建以下数据结构的建议
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/