检查数组中同一对象的多个实例

时间:2015-10-31 12:42:16

标签: java arrays list object duplicates

我正在寻找一种方法来检查一个数组是否包含同一个对象的多个实例。我一直在四处寻找,但似乎无法在javadoc和stackoverflow中找到任何内容。

我正在创建一个垄断棋盘游戏(或丹麦语,斗牛士),其中一个领域的登陆费用取决于玩家拥有的那种类型的领域。

我的播放器类中有一个列表,其中我放置了播放器购买的所有字段:

   public List<OwnableField> ownsList = new ArrayList<>();

    public void buy(OwnableField ownable) {
       pay(ownable.getPrice());
       ownsList.add(ownable);
    }

然后我在特定的字段类中有这个方法,我正在使用if语句来设置费用:

public int fee;

public int feeCalc(int diceScore) {

    if(this.getOwner().ownsList.(whatever checks for duplicate object in array)){

        fee = 200 * diceScore;

    } else {

        fee = 100 * diceScore;

    }

    return fee;
}

1 个答案:

答案 0 :(得分:0)

如果您定义了正确的等号和哈希码,那么您可以使用集来实现

List list = ...

if(new HashSet(list).size().equals(list.size()){
//same size
} else {
//there was a duplicated element
}

如果您只想检查一个特定对象,可以使用:

final Object someObject = ...
List list = ...
int size = FluentIterable.from(list).filter(new Predicate<Object>() {
        @Override
        public boolean apply(Object input) {
            return input == someObject;
        }
    }).size();
if(size > 1) { 
//there is a duplicated element
}

或者,如果您正在寻找类的实例,请尝试:

List list = ...
int size = FluentIterable.from(list).filter(Predicates.instanceOf(YourClass.class)).size();
if(size > 1) { 
//there is a duplicated element
}