2011-03-01 43 views
2

我有一個hashmap的列表。 一個字段是一個整數,另一個字段是布爾值,它會告訴我該項是否被選中。做一個更好的實現修改ArrayList <HashMap <String,Integer >>

最終的目的是更改ArrayList,取消選中已選擇的舊項目,並標記新項目。我做了這段代碼,但我想知道是否有更好的方法來做到這一點。

VisualizationBean visualizationBean = new VisualizationBean(); 
ArrayList<HashMap<Boolean, Integer>> resultsPerPage = visualizationBean.getResultsPerPage(); 
for (Iterator iterator = resultsPerPage.iterator(); iterator.hasNext();) { 
    HashMap<Boolean, Integer> hashMap = (HashMap<Boolean, Integer>) iterator.next(); 
    if(hashMap.containsKey(true)){ 
    int beforeSelected = hashMap.get("true"); 
    hashMap.put(false, beforeSelected); 
    } 
    else{ 
    if(hashMap.get(false) == number){ 
     hashMap.put(true, number); 
    } 
    } 
} 

在此先感謝

回答

5

請不要使用地圖列表做你在做什麼,提出的建議。

使用BitSet,它是專門爲此目的而設計的。 (根據您的要求,您可能需要BitSets的列表,但從來沒有一個地圖列表,特別是從布爾到任何東西)。

或者,您可以使用從整數到布爾的映射(而不是從布爾到整數)。

+0

我猜這樣的事情一定存在,但我沒有找到它。謝謝! – 2011-03-01 11:19:56

+0

和你知道如何mapmor在faces-config.xml中初始化這個字段?我試圖在互聯網上找到一種方式,但沒有成功,現在這個時候 – 2011-03-01 12:23:10

+0

@mujer對不起,我對JSF一無所知。你應該發佈一個單獨的問題 – 2011-03-01 12:29:07

1
  1. 申報接口,而不是具體的類型,即使用ListMap而不是ArrayListHashMap
  2. "true"顯然是錯誤的 - 必須true,因爲前者是a String後者a Boolean

至於你的代碼的邏輯,如果你更多/更好地解釋你正在嘗試做什麼,我會更容易發表評論。

編輯:如果我理解你正在試圖做正確的,那麼我建議你有一個新的類,像SelectedItem有一個id和一個名爲​​方法。然後你可以在VisualisationBean上調用getItems(boolean selected)getItems這樣的方法。前者只會給你選擇或不選擇的項目,後者會給你所有的項目,你將不得不遍歷他們,看看哪一個被選中,哪一個不是。這種類型的變化會讓它感覺更加面向對象,而不是處理數據結構。

EDIT2:或者,根據您的需求,請與@Sean帕特里克·弗洛伊德

0

做一個小的輔助類(在簡單的代碼)

class VisiblitySetting { 
    public static int InvalidIndex = -1; 
    public boolean IsSelectedNow; 
    public boolean WasSelectedBefore; 
    public int SelectionIndex; 
} 

ArrayList<int> wasselected = ...; 
ArrayList<int> isnowselected = ...; 
VisualizationBean visualizationBean = new VisualizationBean(); 
ArrayList<VisiblitySetting> resultsPerPage = visualizationBean.getResultsPerPage(); 
for (Iterator iterator = resultsPerPage.iterator(); iterator.hasNext();) { 
    VisiblitySetting vis = (VisiblitySetting) iterator.next(); 
    if(vis.IsSelectedNow){ 
    wasselected.add(vis.SelectionIndex); 
    vis.IsSelected = false; 
    } 
    else if(vis.WasSelectedBefore){ 
    isnowselected.add(vis.SelectionIndex); 
    vis.IsSelected = false; 
    } 
} 
} 

但我可能已經missunderstood你的代碼。使用這樣的散列沒有多大意義。

相關問題