Содержит метод возвращает всегда false? - PullRequest
0 голосов
/ 19 июня 2019

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

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

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

    phoneContactVOList.add(contactVO)
}

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

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

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

override fun equals(other: Any?): Boolean {
           if(other == null || other !is ContactClassObject)
               return false
           return name == other.ContactName && phoneNumber==other.phoneNumber
        }
0 голосов
/ 19 июня 2019

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

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

...