我有一个hashmap列表。 一个字段是整数,另一个是布尔值,它会告诉我该项是否被选中。
最终目的是更改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);
}
}
}
提前致谢
答案 0 :(得分:5)
请不要使用地图列表来执行您正在执行的操作。
使用BitSet
,它是为此目的而设计的。 (根据您的要求,您可能需要一个BitSet列表,但绝不需要地图列表,特别是从布尔到任何东西)。
或者你可以使用从整数到布尔的Map(不是从布尔到整数)。
答案 1 :(得分:1)
List
和Map
而不是ArrayList
和HashMap
"true"
显然是错误的 - 需要true
,因为前者是一个字符串,后者是Boolean
至于你的代码的逻辑,如果你更多/更好地解释你想要做什么,我会更容易评论。
编辑:如果我理解您正在尝试做的事情,那么我建议你有一个新课程,例如SelectedItem
有一个id
和一个名为{{1}的方法}。然后,您会在isSelected()
上调用类似getItems(boolean selected)
或getItems
的方法。前者只给你那些被选中或未被选中的项目,后者会给你所有的项目,你必须遍历它们才能看到哪一项被选中,哪一项不被选中。这种类型的改变会使它感觉更加面向对象而不是处理数据结构。
Edit2:或者,根据您的需要,选择@Sean Patrick Floyd提出的建议
答案 2 :(得分: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;
}
}
}
但我可能会误解你的代码。使用像这样的哈希没有多大意义。