一种使用数据存储唯一枚举集合的有效方法



在我当前的设置中,我将我的分类枚举(防御)和值(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 并相应地更改我的代码已经解决了我所有的问题。它完全符合我的需求。

最新更新