Элемент сол атаумен тізімде бар

Менің java-ге тізімім бар. Менің сыныптағы өрістер бар және олардың бірі: name . Мысалы, бұл:

List mylist = new ArrayList();
MyClass myElement = new MyClass();
myElement.setName("xxx");

Сонымен, myElement айнымалымен бірдей атты бар Тізімдегі кез-келген элементті қалай тексере аламын және осы айнымалыны шығарып аламын?

0

5 жауаптар

MyClass егер MyClass даналарын бірдей аттары бар болса, MyClass даналарын теңдей етіп теңдейді() тең болса, онда жай ғана жасауға болады:

int index = mylist.indexOf(myElement);
MyClass myListElement = mylist.get(index);

Өкінішке орай, жинағы / List API ішіндегі «осы әдіске equal() элементін алыңыз, ол тиімдірек жүзеге асырылады.

Егер сіз істемесеңіз сияқты equals() қолданбасаңыз (немесе қандай да бір себептермен келеді емес, онда сізде мұны зығыр, ескі тәсілмен жасау:

MyClass listElement = null;
for (MyClass mc : mylist) {
  if (myElement.getName().equals(mc.getName()) {
    listElement = mc;
    break;
  }
}
// if listElement is non-null here, then we found it
3
қосылды
Мен жай ғана қызықты. Үздіксіз үзілістің ішіне үзіліс жасап, сонымен қатар циклды қолданған дұрыс емес пе?
қосылды автор kamaci, көзі
@kamaci: қай метрикамен жақсы? Мен break дегенге сенбеймін және continue әрдайым жаман «мантра болып табылады және бұл жағдайда ол өте оқылатын деп ойлаймын, сондықтан проблеманы көрмеймін.
қосылды автор Joachim Sauer, көзі

If using Apache CollectionUtils is an option, the find method does exactly that :

CollectionUtils.find(myList, new Predicate(){
  public boolean evaluate(Object o){
    return name.equals(((MyClass) o).getName());
  }
})
2
қосылды

Енгізілген ешнәрсе жоқ, мұны қолмен жасау керек:

MyClass findByNameOrNull(List list, String name) {
  for(MyClass myClass: list)
    if(myClass.getName().equals(name))
      return myClass;
  return null
}

Бұл ламбдаларды қолдауға болатын оңай жерде шешілетін проблемалардың бірі (мұнда Scala):

mylist.find(_.name == "xxx")
0
қосылды
Find дегеніміз не Scala нысанға немесе индекске қайтып келеді? Мен бұл объект деп ойлаймын, дұрыс?
қосылды автор Joachim Sauer, көзі
Ия, ол объектіні немесе дәлірек айтқанда: Option - null дегенді ауыстыратын жұқа қабықшаны қайтарады. Әрине, indexWhere() де бар, ол предикатқа сәйкес келетін бірінші элемент индексін қайтарады.
қосылды автор Tomasz Nurkiewicz, көзі
Downvoter, түсіндіруге қамқорлық?
қосылды автор Tomasz Nurkiewicz, көзі

name өрістеріне тең болса true қайтару үшін myClass equals() әдісін алдын ала анықтау (String's тең() ).

0
қосылды
Бұл мәселені шешсе де, MyClass егер name -дан басқа/басқа сипаттардағы теңдікті анықтау үшін қажет болса, құрттар құралын ашады.
қосылды автор S.L. Barth, көзі
  1. теңдікті салыстыру үшін атауды қолдануға тең әдісті елемеуіңіз керек. equals() , hashCode() hashcode-if-overriding-equals/20 «rel =» nofollow «> мұнда оқу .

  2. Берілгенге сәйкес келетін элементтер бар-жоғын тексеру үшін indexOf() пайдалана аласыз. Ол equals() :

  3. пайдаланады

yourlist.indexOf (o) қалай сәйкестікті анықтайды:

(o==null ? get(i)==null : o.equals(get(i)))

Содан кейін табылған индексті (i) l.get (i) жасай аласыз.

0
қосылды