Содержит метод, который всегда возвращает false?

Я получаю контакты и добавляю их в список. Список также содержит повторяющиеся контакты, мне нужно удалить повторяющиеся контакты во время добавления в список.

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

if (!phoneContactVOList.contains(contactVO)) {
    contactVO.ContactName = name
    contactVO.ContactNumber = phoneNumber

    phoneContactVOList.add(contactVO)
}

здесь выше код, я пытаюсь добавить только уникальные контакты в список, но также добавляются повторяющиеся контакты.


person Amar Giram    schedule 19.06.2019    source источник
comment
Переопределяет ли контактный класс метод equals?   -  person Sergey Glotov    schedule 19.06.2019


Ответы (2)


Вам нужно переопределить метод equals(...) и написать собственную реализацию, которая возвращает истину, если name и phoneNumber совпадают. Например так:

override fun equals(other: Any?): Boolean {
           if(other == null || other !is ContactClassObject)
               return false
           return name == other.ContactName && phoneNumber==other.phoneNumber
        }
person melanzane    schedule 19.06.2019
comment
Вы не сравниваете контактный объект со списком контактов. Вы просматриваете список и сравниваете каждый элемент списка, а именно контактный объект, с сопоставимым контактным объектом. Если вы не можете понять это, задайте этот вопрос в новой ветке. - person melanzane; 19.06.2019

Вы устанавливаете значения в объекте contactVO, если ваш Arraylist не содержит этого. Каковы значения каждой переменной contactVO, когда проверка содержит метод? Вы не можете так поступить. Вам нужно проверить одну конкретную переменную для каждого элемента arrayylist, чтобы принять решение, добавлять он или нет. Пройдите цикл и затем проверьте номер телефона, если он не совпадает, добавьте в список. Следуйте приведенному ниже коду,

boolean insert = true;

    for(int i = 0; i < phoneContactVOList.size(); i++){

        if (phoneContactVOList.get(i).ContactNumber.equals(phoneNumber)){

            insert = false;

            break;
        }
    }

    if (insert){
        //set phoneContactVOList variable values
        phoneContactVOList.add(contactVO);
    }

## Перед запуском цикла вам необходимо установить значение переменной вставки false

person Exigente05    schedule 19.06.2019
comment
раствор меланзана - хороший. Здесь вы просто как бы воссоздаете метод contains самостоятельно. - person cesarmarch; 19.06.2019