Почему список Kotlin removeAll не работает в этом примере:
orderList.addAll(allProducts)
orderList.removeAll(allProducts)
Приведенный выше код добавит продукты, но не удалит их. orderList — это mutableList
Продукт:
class Product : EmbeddedRealmObject {
var name: String = ""
var category: String = ""
var productDescription: String? = ""
var price: Float = 0F
var imagine: String? = null
}
fun MenuOfferItem( заказ: Заказ, всеПродукты: Список<Продукт>, OrderList: SnapshotStateList<Продукт>, totalPriceWithOutDelivery: MutableState<Float> )
это внутри функции
Пожалуйста, отредактируйте свой вопрос, чтобы включить исходный код Product.
Есть идеи? почему не удаляет
Это не работает, потому что у вас нет правильных функций equals() и hashcode(), определенных для вашего класса Product. removeAll работает, находя элементы в вашей коллекции, где проверка на равенство equals() возвращает true с элементами в коллекции, которую вы передаете ей. Он также использует внутренний набор для оптимизации этого процесса, поэтому hashcode() должен быть правильно определен по отношению к equals().
Вы можете сгенерировать equals() и соответствующие hashcode() функции, используя параметры в среде IDE, или вы можете определить это как класс data вместо простого класса. data классы автоматически имеют правильные equals() и hashcode(), которые используют все свойства, определенные в первичном конструкторе.
Это сработало! Я не понимаю, почему для простого удаления не нужны equals и hashcode()
Они нужны, если вы не передаете один и тот же исходный экземпляр, и в этом случае equals вернет true, даже если он игнорирует все значения свойств.
Откуда
orderList? А как насчетallProducts? Вы не дали нам много работы. (Достаточно сломанныйequalsможет сделать это, но вы также не сказали нам, какой тип объектов...)