如何将此行和列数据添加到HashMap?

时间:2012-05-17 11:50:05

标签: java arraylist hashmap

我正在尝试阅读一个说

的文件
Name,Date,Place

Tom,1/1/2010,America
Dick,2/2/2011,China
Harry,3/3/2012,Germany

并将列标题添加到String,将值添加到ArrayList。

HashMap<String columnName ,ArrayList<String> Value>

所以程序应该像

一样运行
if(lineNumber == 1)
{
   interate through values and create headers
}
else
   add values to corresponding header list

我的问题是我不知道如何在代码的else部分引用arraylist。 如果有人做了类似的事情,我想听听你的意见!

修改

到目前为止我有类似的东西,

public void consumeLine(String path,int lineNumber,List line){

    if(lineNumber == 1)
    {
        ListIterator listIterator = line.listIterator();
        while(listIterator.hasNext())
        {   
            hashMap.put(listIterator.next().toString(),new ArrayList<String>());
        }
    }

2 个答案:

答案 0 :(得分:1)

您想要创建列名的有序列表,并在遍历每行中的值时迭代它。

像这样(未经测试的代码!):

ListIterator listIterator = line.listIterator();
if(lineNumber == 1)
{
    while(listIterator.hasNext())
    {   
        String key = listIterator.next().toString();
        keyList.add(key); // keyList is a List<String> instance field.
        hashMap.put(key, new ArrayList<String>());
    }
} else {
    Iterator<String> keyIterator = keyList.iterator();
    while(keyList.hasNext() && listIterator.hasNext())
    {
        String key = keyList.next();
        String value = listIterator.next();
        ArrayList<String> values = hashMap.get(key);
        values.add(value);
    }
}

答案 1 :(得分:0)

试一试:

  public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
        int lineNumber = 1;
        String[] columnName = null;
        ArrayList<String[]> value = new ArrayList<String[]>(); // temp array
        String line;
        String[] arr;
        while (reader.ready())
            if (!(line = reader.readLine()).isEmpty()) {
                arr = line.split("\\s+");
                if (lineNumber == 1)
                    columnName = arr;// create headers
                else
                    value.add(arr);// create values
                lineNumber++;
            }
        // transform data
        for (int i = 0; i < columnName.length; i++) {
            ArrayList<String> ar = new ArrayList<String>();
            for (int j = 0; j < value.size(); j++)
                ar.add(value.get(j)[i]);
            map.put(columnName[i], ar);
        }
        System.out.println(map);
    }