在我当前的设置中,我将我的分类枚举(防御)和值(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 对象的数据时,会出现问题。我需要合并多个排名防御列表,同时确保相同的防御永远不会重复。
我发现唯一有效的方法是反复迭代两个列表并检查。但是,我不确定我使用的方法是否正常工作。
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 的代码行放在哪里,如果列表中还没有具有相同防御的代码行。
有没有更有效的方法来存储我的值,以防止这种迭代头痛?如果没有,是否有一种更易读、更可靠的方法来实现迭代代码?
使用 EnumMap 并相应地更改我的代码已经解决了我所有的问题。它完全符合我的需求。