Найти indexOf объекта в пользовательском списке, используя один атрибут - PullRequest
3 голосов
/ 28 июня 2019

Итак, у меня есть пользовательский класс и массив данных этого класса.Теперь я хочу получить индекс объекта в этом массиве, используя только тот идентификатор, который мне доступен, среди других атрибутов, составляющих объект этого класса.

Я видел несколько примеров в Интернете, но яЯ в некотором замешательстве, они переопределяют hashCode () и equals (), и в equals () они проверяют все атрибуты, я просто хочу проверить с помощью значения идентификатора, так как для каждого объекта идентификатор уникален.

public class MyClass {
    private String ID;
    private String name;
    private String userName;
    private String position;

    // Constructors and getters and setters
}

Итак, я хочу, скажем, такой кусок кода:

List<MyClass> list=new ArrayList<>();
//Values are populated into list
int i=list.indexOf(someObjectsID); //Where someObjectsID is a String and not a MyClass object

int У меня будет indexOf объекта MyClass в списке с идентификатором, равным someObjectsID

Ответы [ 3 ]

1 голос
/ 28 июня 2019

Если вы открыты для использования сторонней библиотеки, вы можете использовать detectIndex из Eclipse Collections .

int index = ListIterate.detectIndex(list, each -> each.getID().equals(someObjectsID));

Если список имеет тип MutableList, метод detectIndex доступен непосредственно в списке.

MutableList<MyClass> list = Lists.mutable.empty();
int index = list.detectIndex(each -> each.getID().equals(someObjectsID));

Примечание: я являюсь коммиттером для Eclipse Collections

0 голосов
/ 28 июня 2019

Существует одно абсолютно гарантированное, эффективное решение этой проблемы. Ничто другое не будет работать так просто и эффективно.

Это решение состоит в том, чтобы просто написать цикл, а не пытаться придумать.

for(int i = 0; i < list.size(); i++){
  if (list.get(i).getId().equals(id)) {
    return i;
  }
}
return -1;

Нет необходимости связываться с hashCode или равно. Нет необходимости форсировать индексы в потоки, не предназначенные для них.

0 голосов
/ 28 июня 2019

Переопределите hashCode & equals в вашем пользовательском объекте, тогда indexOf будет просто работать (tm).

...