Java 用于保存和稍后合并稀疏数据的数据结构

Java 用于保存和稍后合并稀疏数据的数据结构,java,data-structures,java-8,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的列一起构成一个唯一的行。现在,我应该能够读取c

需要关于构建以下数据结构的建议吗

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阅读器从CSV中读取一行。

您可以使用哈希映射,其中键是所有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
}
HashMap hm=newhashmap();
while(csvreader.hasNext()){
String line=csvreader.lineReader().readLine();
String[]fields=csvreader.parser.parseLine(行);
字符串键=字段[0]+:“+字段[2];
ArrayList exists=hm.get(key);
if(exists==null)
hm.put(key,newarraylist(Arrays.asList(fields));
其他的
对于(int i=0;i 0)
exists.set(i,字段[i]);//仅当值不为null时才设置值
}

您可以使用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
}
HashMap hm=newhashmap();
while(csvreader.hasNext()){
String line=csvreader.lineReader().readLine();
String[]fields=csvreader.parser.parseLine(行);
字符串键=字段[0]+:“+字段[2];
ArrayList exists=hm.get(key);
if(exists==null)
hm.put(key,newarraylist(Arrays.asList(fields));
其他的
对于(int i=0;i 0)
exists.set(i,字段[i]);//仅当值不为null时才设置值
}