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

时间:2016-04-23 01:58:47

标签: java enums

在我目前的设置中,我将我的分类枚举(防御)和值(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的代码行放在哪里。

是否有更有效的方法来存储我的值,以防止此迭代头痛?如果没有,是否有更可读和可靠的方法来实现迭代代码?

1 个答案:

答案 0 :(得分:0)

使用EnumMap并相应地更改我的代码已经解决了我所有的问题。它完全符合我的要求。