indexOf () в Android при использовании Helper - PullRequest
0 голосов
/ 14 февраля 2019

Я знаю, что приведенный ниже код дает индекс этого конкретного элемента в Java.

List<String> list = new ArrayList<>();

list .add("100");

Log.d("TAG",String.valueOf(list.indexOf("300")));

Но как получить индекс элемента при использовании вспомогательного класса?

List<HelperClass> Arraylist= new ArrayList<>();

Arraylist.add(new HelperClass(name, email, phoneno));

Log.d("TAG", String.valueOf(new HelperClass(Arraylist.indexOf(name,email,phoneno))));

Я искал это везде, но не смог найти.Может кто-нибудь сказать мне, как найти индекс определенного элемента в arraylist при использовании модального для добавления данных?

Очевидно, что я пробовал неправильно, и он показывает красную линию под всей строкой, но я просто набрал этот код дляваше понимание того, чего я хочу достичь.Может кто-нибудь подсказать, пожалуйста?

Помощник

 @Override
public int hashCode() {
    int result = getName() != null ? getName().hashCode() : 0;
    result = 31 * result + (Email != null ? Emaail.hashCode() : 0);
    result = 31 * result + (PhoneNo!= null ? PhoneNo.hashCode() : 0);

    return result;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Helper)) return false;

    Helperthat = (Helper) o;

    if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null)
        return false;
    if (Email != null ? !Email.equals(that.Email) : that.Email != null)
        return false;
    if (PhoneNo != null ? !PhoneNo.equals(that.PhoneNo) : that.PhoneNo != null)
        return false;

}

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

indexOf требует объект в качестве ввода.Если он не находит объект, который вы передаете, он вернет -1.Вам нужно передать объект, местоположение которого в искомом массиве, которое вы ищете, в качестве входных данных в функцию indexOf.

Решение: создать HelperClass для передачи в метод indexOf:

.indexOf(new HelperClass(name, email, phoneno));

Однако это изменение само по себе все равно вернет -1.См. Документацию API для indexOf:

public int indexOf (Object o)

Возвращает индекс первого вхождения указанного элемента в этом списке или -1, если этот списокне содержит элементБолее формально, возвращает самый низкий индекс i, такой что (o == null? Get (i) == null: o.equals (get (i))), или -1, если такого индекса нет.

Он использует равенства, чтобы решить, найдено ли совпадение.Вы должны были переопределить метод equals в своем классе HelperClass, поэтому он использует реализацию по умолчанию в java.lang.Object, которая сравнивает ссылки и возвращает true, только если две ссылки HelperClass ссылаются на один и тот же объект.

Переопределить равно и хэш-код для вашего HelperClass класса, например:

@Override public boolean equals(Object other) {
    if (!(other instanceof HelperClass)) {
        return false;
    }
    HelperClass otherHelperClass = (HelperClass)other;
    return otherHelperClass.x == this.x && otherHelperClass.y == this.y;
}

@Override public int hashCode() {
    return x + y; // same values should hash to the same number
}
0 голосов
/ 14 февраля 2019

ArrayList#indexOf использует метод сравнения Object#equals.

Если вы хотите иметь возможность поиска экземпляра HelperClass внутри Collection, вам нужно предоставить свой переопределенный equals метод и, возможно, также hashCode, для использования с другими, конкретными, Collection реализациями (Map, Set и т. д.).

class HelperClass {
   ...

   @Override
   public boolean equals(final Object object) {
      if (object == this) {
        return true;
      }

      if (!(object instance of HelperClass)) {
         return false;
      }

      final HelperClass other = (HelperClass) object;
      return name.equals(other.name) &&
             email.equals(other.email) &&
             phone.equals(other.phone);
   }
}

Вам, очевидно, необходимо иметьсоответствующий HelperClass экземпляр для поиска совпадения.

final String name = "Name";
final String email = "Email";
final String phone = "Phone";

final HelperClass first = new HelperClass(name, email, phone);
final HelperClass second = new HelperClass(name, email, phone);

final List<HelperClass> helpers = new ArrayList<>(8);
helpers.add(first);

final int index = helpers.indexOf(second); // index = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...