Listede aynı ada sahip öğe var

Java'da bir listem var. Sınıfımın alanları var ve bunlardan biri: name . Farz edelim ki:

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

Peki List'te myElement değişkeni ile aynı adı içeren ve bu değişkeni alan herhangi bir öğeyi nasıl kontrol edebilirim?

0

5 cevap

MyClass öğeniz, equals() 'ı aynı ada sahipse iki MyClass örneğini eşit yapacak şekilde uygularsa, şunları yapabilirsiniz:

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

Maalesef Koleksiyon / Liste API’sindeki Collection / List API’sinde “ eşit() 'e sahip olan öğeyi al” daha verimli bir şekilde uygulanmalıdır.

böyle bir eşittir() uygulamasına sahip değilseniz (veya bir nedenden dolayı istemiyorsanız istemiyorsanız), sıkıcı, eski moda bir şekilde yapmak için:

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
katma
Sadece bunu merak ediyorum. Bir for döngüsü içinde mola kullanmamak ve loop yaparken kullanmak daha mı iyidir?
katma yazar kamaci, kaynak
@kamaci: Hangi ölçütten daha iyi? " break ve Devam Et 'ın her zaman kötü olduğuna" inanmıyorum ve bu durumda oldukça okunaklı olduğunu düşünüyorum, bu yüzden bir sorun görmüyorum.
katma yazar Joachim Sauer, kaynak

Apache CollectionUtils bir seçenektir, find yöntemi tam olarak şunu yapar:

CollectionUtils.find(myList, new Predicate(){
  public boolean evaluate(Object o){
    return name.equals(((MyClass) o).getName());
  }
})
2
katma

Yerleşik hiçbir şey yok, bunu manuel olarak yapmanız gerekir:

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

Bu, lambdaların desteklendiği yerlerde kolayca çözülebilen sorunlardan biridir (burada Scala'da):

mylist.find(_.name == "xxx")
0
katma
Nesnede veya dizinde bulduğu Scala öğesinde ne döndürür? Sanırım nesne bu, değil mi?
katma yazar Joachim Sauer, kaynak
Evet, bir nesneyi döndürür veya daha doğrusu: Bir Option - null yerine ince bir sarmalayıcı. Tabii ki, belirtilen ilk öğe eşleşmesinin bir dizinini döndüren indexWhere() da vardır.
katma yazar Tomasz Nurkiewicz, kaynak
Downvoter, açıklamak ister misin?
katma yazar Tomasz Nurkiewicz, kaynak

name alanlarının eşit olması durumunda true değerini döndürmek için MyClass için equals() yöntemini geçersiz kılın (String's eşittir() ).

0
katma
Bu sorunu çözerken, ad 'dan başka/daha fazla özelliklerde eşitliği tanımlamak için Sınıfım gerekliyse solucanlar konservesi açar.
katma yazar S.L. Barth, kaynak
  1. Eşitliği karşılaştırmak için isim kullanmak için eşittir yöntemini geçersiz kılmalısınız. Ayrıca, equals() , burada okuyun .

  2. Verilenle eşleşen öğelerin olup olmadığını kontrol etmek için indexOf() 'u kullanabilirsiniz. equals():

  3. öğesini kullanır.

yourlist.indexOf (o) eşleşmeyi nasıl belirlediğini şöyle gösterir:

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

Sonra bulduğunuz dizinde (i) l.get (i) 'i yapabilirsiniz.

0
katma