Список Kotlin removeAll не работает со списком

Почему список 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

}

Откуда orderList? А как насчет allProducts? Вы не дали нам много работы. (Достаточно сломанный equals может сделать это, но вы также не сказали нам, какой тип объектов...)

Louis Wasserman 17.11.2022 21:09

fun MenuOfferItem( заказ: Заказ, всеПродукты: Список<Продукт>, OrderList: SnapshotStateList<Продукт>, totalPriceWithOutDelivery: MutableState<Float> )

Cipri 17.11.2022 21:23

это внутри функции

Cipri 17.11.2022 21:25

Пожалуйста, отредактируйте свой вопрос, чтобы включить исходный код Product.

Tenfour04 17.11.2022 21:31

Есть идеи? почему не удаляет

Cipri 17.11.2022 21:45
0
5
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не работает, потому что у вас нет правильных функций equals() и hashcode(), определенных для вашего класса Product. removeAll работает, находя элементы в вашей коллекции, где проверка на равенство equals() возвращает true с элементами в коллекции, которую вы передаете ей. Он также использует внутренний набор для оптимизации этого процесса, поэтому hashcode() должен быть правильно определен по отношению к equals().

Вы можете сгенерировать equals() и соответствующие hashcode() функции, используя параметры в среде IDE, или вы можете определить это как класс data вместо простого класса. data классы автоматически имеют правильные equals() и hashcode(), которые используют все свойства, определенные в первичном конструкторе.

Это сработало! Я не понимаю, почему для простого удаления не нужны equals и hashcode()

Cipri 18.11.2022 00:24

Они нужны, если вы не передаете один и тот же исходный экземпляр, и в этом случае equals вернет true, даже если он игнорирует все значения свойств.

Tenfour04 18.11.2022 03:10

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