开发者

Make a better implementation modifying ArrayList<HashMap<String, Integer>>

I have a list of hashmap. One field is an Integer, and the other one is a Boolean which will tell me if that item is selected or not.

The final purpose is to change the ArrayList, unselected the old one item which was selected, and marking the new one. I made this piece of code, but I wich to know if there is a better way to do it.

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, beforeSelecte开发者_开发百科d);
   }
   else{
    if(hashMap.get(false) == number){
      hashMap.put(true, number);
    }
  }
}

Thanks in advance


Please don't use a List of Maps to do what you are doing.

Use BitSet, it's designed for this exact purpose. (Depending on your requirements you may need a list of BitSets, but never a List of Maps, especially not from Boolean to anything).

Alternatively you could use a Map from Integer to Boolean (not from Boolean to Integer).


  1. Declare interfaces rather than concrete types, i.e. use List and Map rather than ArrayList and HashMap
  2. "true" is clearly wrong - needs to be true, as the former is a String the latter a Boolean

As for the logic of your code, it would be easier for me to comment if you explained a bit more/better what you are trying to do.

Edit: If I understand what you're trying to do right, then I suggest that you have a new class, something like SelectedItem that has an id and a method called isSelected(). Then you'd call a method like getItems(boolean selected) or getItems on VisualisationBean. The former would give you only those items that are selected or not selected, the latter would give you all items and you would have to iterate through them to see which one is selected and which one is not. That type of change would make it feel more object-oriented rather than handling data structures.

Edit2: Or, depending on your needs, go with the suggestion made by @Sean Patrick Floyd


Make a small helper class (In simplistic code)

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

But I might have missunderstood your code. Using a hash like that doesn't make much sense.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜