2012-05-17 67 views
-1

我想讀出已經說如何將此行和列數據添加到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>()); 
     } 
    } 
+0

如果只有第一行是頭那麼它會做,或者更好的是有一些標識符(邏輯)來標識標題 –

+0

@Tom celic是第一行總是標題? – ant

+0

是的,它應該是 – TomSelleck

回答

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); 
    } 
} 
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); 
    }