2010-11-23 184 views
0

請參見下面的描述來查看問題定義。 我有ArrayList包含HashMap。在HashMap中存在一個或多個鍵值對。 ArrayList的包含以下:Java ArrayList:從包含HashMap的ArrayList中獲取不同的值

HashMap1包含 鍵:列1值:0001 鍵:COLUMN2值:1 鍵:欄3值:1

HashMap2包含 鍵:列1值:0001 鍵:列2值:1 key:column3 value:2

HashMap1和HashMap2都保存在ArrayList中。

現在我進入像(列1,列2) 然後我需要一個像 輸出創建一個包含以下數據的新的ArrayList的字符串:

HashMap1包含 鍵:COLUMN1值:0001 鍵:COLUMN2值: 1

當我輸入字符串等(列1,欄3) 創建新的ArrayList含有以下數據:

HashMap1包含 鍵:COLUMN1值:0001 鍵:欄3值:1

HashMap2包含 鍵:COLUMN1值:0001 鍵:欄3值:2

即我想從不同的值根據輸入字符串的ArrayList。 請幫助我邏輯上我怎樣才能達到相同的。

+0

我重讀了幾次,我仍然沒有關注... – 2010-11-23 13:46:40

回答

1

你可以做的是,

for each map in the list. 
    copy the map. 
    map.keySet().retainAll(keys-you-want-to-keep) 
    set-of-results.add(map) 

這樣你將有一套子地圖。

0

沒有比代碼更嚴格的了。所以這裏是做你想做的事。請仔細看一下selectColumns方法。地圖列表存儲在類字段列表中。

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 


public class Matrix { 

    private List<Map<String, String>> list = new ArrayList<Map<String,String>>(); 

    public Matrix(int numRows) { 
     for (int i = 0; i < numRows; i++) { 
      list.add(new HashMap<String, String>()); 
     } 
    } 

    private void set(int row, String string, String string2) { 
     list.get(row).put(string, string2); 
    } 

    public Matrix selectColumns(String... columns) { 
     Matrix select = new Matrix(list.size()); 
     for (String column : columns) { 
      for (int row = 0; row < list.size(); row++) { 
       select.set(row, column, list.get(row).get(column)); 
      } 
     } 
     return select; 
    } 

    public static Matrix createDummy(int dim) { 
     Matrix matrix = new Matrix(dim); 
     for (int i = 0; i < dim; i++) { 
      for (int j = 0; j < dim; j++) { 
       matrix.set(i, "col" + j, "val:" + i + "|" + j); 
      } 
     } 
     return matrix; 
    } 

    public static void main(String[] args) { 
     Matrix mainMatrix = Matrix.createDummy(3); 
     System.out.println(mainMatrix.list); 
     System.out.println(mainMatrix.selectColumns("col1", "col2").list); 
    } 

}