在我目前的设置中,我将我的分类枚举(防御)和值(Rank,也是一个枚举)存储在包装器对象中。
public class RankedDefense implements Serializable {
private Defense defense;
private Rank rank;
public RankedDefense(Defense d, Rank r) {
defense = d;
rank = r;
}
public Defense getDefense() {
return defense;
}
public Rank getRank() {
return rank;
}
}
然后我将这些列表存储在数据对象(ScoutData)中。在任何这些列表中都不会重复相同的防御。
当我实现从多个ScoutData对象组织数据的方法时,会出现问题。我需要合并多个RankedDefenses列表,同时确保永远不会重复相同的防御。
我发现这样做的唯一有效方法是反复迭代两个列表并检查。但是,我对自己使用的方法甚至无法正常工作也不自信。
List<RankedDefense> defenses = new ArrayList<>();
for (ScoutData d : data) {
//We need to compare every item in every list
for (RankedDefense potential : d.getTeleopListDefensesBreached()) {
for (RankedDefense listItem : defenses) {
if (listItem.getDefense() == potential.getDefense()) {
defenses.add(new RankedDefense(listItem.getDefense(), Rank.NOT_ATTEMPTED)); //TODO actually average the ranks
break;
}
}
}
}
return defenses;
如果一个具有相同防御功能的代码已经不在列表中,我似乎无法确定将添加RankedDefense的代码行放在哪里。
是否有更有效的方法来存储我的值,以防止此迭代头痛?如果没有,是否有更可读和可靠的方法来实现迭代代码?
答案 0 :(得分:0)
使用EnumMap并相应地更改我的代码已经解决了我所有的问题。它完全符合我的要求。