Java 多维可查询哈希映射数组

Java 多维可查询哈希映射数组,java,arrays,csv,multidimensional-array,openjdk,Java,Arrays,Csv,Multidimensional Array,Openjdk,我有一个CSV文件,我想将其存储为Java对象。我希望列的名称是数组的第一维,键对值是数组的第二维。我尝试过不同的解决方案(主要是LinkedHashMaps),但似乎没有一个能正常工作 CSV如下所示: TimeStamp;Column 1;Column 2;Column3 1385733406;Value1;Value12;Value13 1385733409;Value21;Value22;Value23 1385733411;Value31;Value32;Value33 ["Colu

我有一个CSV文件,我想将其存储为Java对象。我希望列的名称是数组的第一维,键对值是数组的第二维。我尝试过不同的解决方案(主要是LinkedHashMaps),但似乎没有一个能正常工作

CSV如下所示:

TimeStamp;Column 1;Column 2;Column3
1385733406;Value1;Value12;Value13
1385733409;Value21;Value22;Value23
1385733411;Value31;Value32;Value33
["Column 1"]
    ["1385733406","Value1"]
    ["1385733409","Value21"]
    ["1385733411","Value31"]
["Column 2"]
    ["1385733406","Value2"]
    ["1385733409","Value22"]
    ["1385733411","Value32"]
["Column 3"]
    ["1385733406","Value2"]
    ["1385733409","Value22"]
    ["1385733411","Value33"]
我希望阵列看起来像这样:

TimeStamp;Column 1;Column 2;Column3
1385733406;Value1;Value12;Value13
1385733409;Value21;Value22;Value23
1385733411;Value31;Value32;Value33
["Column 1"]
    ["1385733406","Value1"]
    ["1385733409","Value21"]
    ["1385733411","Value31"]
["Column 2"]
    ["1385733406","Value2"]
    ["1385733409","Value22"]
    ["1385733411","Value32"]
["Column 3"]
    ["1385733406","Value2"]
    ["1385733409","Value22"]
    ["1385733411","Value33"]
这样,我就能够查询对象并从给定列检索所有密钥对值,例如,从第1列检索所有数据。使用HashMaps似乎不起作用,因为它们需要两个参数,而这样做似乎不是正确的方法。这是迄今为止我能想到的代码,我认为这不是正确的方向,但这是我能想到的全部。我正在使用OpenJDK1.7

public class CsvCollection {
    public Map<String,Map<String,Integer>> Results = new LinkedHashMap<String, Map<String,Integer>>();

    public CsvCollection(){

    }

    public void parseCsvResultFile(File csvFile){       
        CSVReader reader = null;
        List myEntries = null;
        try {
            reader = new CSVReader(new FileReader(csvFile.getAbsolutePath()), ';');
        } catch (FileNotFoundException e) {
            System.out.println("Error opening [], aborting parsing");
        }
        try {
            myEntries = reader.readAll();
        } catch (IOException e) {
            System.out.println("Error reading content of CSV file (but file was opened)");
        }

        for(String header: (String[]) myEntries.get(0)){
            Results.put(header, null);
            // What now?
        }       
    }
}
公共类CSV集合{
公共映射结果=新建LinkedHashMap();
公共CSV集合(){
}
public void parseCsvResultFile(文件csvFile){
CSVReader reader=null;
列表myEntries=null;
试一试{
reader=new-CSVReader(新文件读取器(csvFile.getAbsolutePath()),“;”;
}catch(filenotfounde异常){
System.out.println(“错误打开[],中止解析”);
}
试一试{
myEntries=reader.readAll();
}捕获(IOE异常){
System.out.println(“读取CSV文件内容时出错(但文件已打开)”;
}
对于(字符串头:(字符串[])myEntries.get(0)){
Results.put(头,空);
//现在怎么办?
}       
}
}

您可以进行如下2项更改,以实现所需的功能

1) 更改以下代码

public Map<String,Map<String,Integer>> Results = new LinkedHashMap<String, Map<String,Integer>>();

注意:以上示例使用以下CSV文件中的内容执行:

TimeStamp;Column 1;Column 2;Column3
1385733406;Value1;Value12;Value13
1385733409;Value21;Value22;Value23
1385733411;Value31;Value32;Value33

我觉得还可以。基本上就是这样,或者使用POJO创建自己的自定义数据结构。是什么让你认为这是错误的解决方案?我添加了“Results.put(header,null)”,所以我不确定这是否会成为一个真正的多维数组。这正是我想要做的,非常感谢:)我被卡住了,因为我的大脑坚持要我在其他两个循环之前执行Results.put(),回想起来,我真是太蠢了。因为这个我被卡住了,它可能会持续很长一段时间才松开!谢谢!欢迎很高兴这对你有帮助。那就往前走吧。:)
   for(Map.Entry<String, List<String[]>> entry : Results.entrySet())
    {
        System.out.printf("[%s]\n",entry.getKey());
        for(String[] array : entry.getValue())
        {
            System.out.println(Arrays.toString(array));
        }
    }
[Column 1]
[1385733406, Value1]
[1385733409, Value21]
[1385733411, Value31]
[Column 2]
[1385733406, Value12]
[1385733409, Value22]
[1385733411, Value32]
[Column3]
[1385733406, Value13]
[1385733409, Value23]
[1385733411, Value33]
TimeStamp;Column 1;Column 2;Column3
1385733406;Value1;Value12;Value13
1385733409;Value21;Value22;Value23
1385733411;Value31;Value32;Value33