在不使用密钥的情况下在LinkedHashMap中插入值

时间:2016-06-23 07:26:18

标签: java file dictionary collections linkedhashmap

我有CSV格式的表格数据。第一行包含所有列名(键),所有后续行都是记录(值),如下所示:

ID,Name,Contact,Address
1,Alex,987654321,CA USA
2,Bob,4489398,LA USA
3,Marley,7236487,Washington

我正在读取此文件并尝试将记录存储为LinkedHashMap中的键值对。这是我的代码,以显示我想要做的事情。我的问题写在代码中作为评论。

public static void readCSV() throws IOException {

    BufferedReader br = new BufferedReader(new FileReader("table.csv"));

    Map<String, ArrayList<String>> map = new LinkedHashMap<>();

    String line = br.readLine();
    String[] keys = line.split(",");

    /*insert all keys with a corresponding empty arraylist as value to store
    all values of a particular key. ie each arralist will contain all values
    of individual columns. Since it is a linkedhashmap, keys are stored in 
    same order as they appear in the csv file*/

    for (String key : keys) {
        map.put(key, new ArrayList<String>());
    }

    while((line = br.readLine())!=null){
        String[] values = line.split(",");

        for (String value : values) {

            /*here I want to get the arraylists sequentially to store value.
            I know the first value goes in the first arraylist, second goes
            to second arraylist and so on.

            Is there a way to do this without using the key here??
            */

        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用Iterator来迭代Map的值:

while((line = br.readLine())!=null){
    String[] values = line.split(",");

    Iterator<ArrayList<String>> iter = map.values().iterator ();
    for (String value : values) {

        if (iter.hasNext()) {
            iter.next().add(value);
        }

    }
}