ArrayDeque содержит объект?

Я создаю элементарную систему инвентаря с ArrayDeque, где вещи помещаются в инвентарь.

Couch couch1 = new Couch("I wouldn't sit on it.", 100, true);
roomList[0].inventory.add(couch1);

Я проверяю, есть ли предмет в такой комнате.

if (input.matches(".*look.*"))
{
    if(input.matches(".*Couch.*"))
    {
        if(roomList[currentRoom].inventory.contains(???))
        {
            //code to be executed.
        }
    }
}

Что я положил в??? для того, чтобы проверить, содержит ли инвентарь ArrayDeque объект couch1? Если это невозможно, есть ли лучший способ сделать это?

1 ответ

contains() функция основана на вашей реализации equals(), По умолчанию вы должны предоставить точно такой же объект (так couch1). Если вы переопределите, вы можете сделать свою собственную версию равной, например, сравнивая все поля. Очень полезным инструментом для этого является Apache EqualsBuilder, здесь также объясняется, как реализовать equals() функция.

Недостатком является то, что вы должны создать объект кушетки с теми же полями. Если это невозможно, вы можете использовать другой тип данных, например карту. Вы можете сохранить уникальный идентификатор на основе некоторых полей дивана.

Последняя альтернатива - не использовать contains() функция и вместо этого сделать свою собственную функцию, которая зацикливается на Deque и фильтры на основе некоторых других критериев выбора.

Другие вопросы по тегам