Listに同じ名前の要素が存在する

私はJavaでListを持っています。私のクラスはフィールドを持ち、そのうちの1つは name です。次のように仮定します。

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

だから、どのように変数と同じ名前を持ち、その変数を取得するListの要素があるかどうかを確認できますか?

0

5 答え

同じ名前を持つ2つの MyClass インスタンスが同じになるように MyClass equals()を実装する場合は、

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

残念ながら、 Collection / 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
追加された
ちょうど私はそれが不思議です。 forループとwhileループを使用しない方が良いでしょうか?
追加された 著者 kamaci,
@ kamaci:何がメトリックより優れていますか?私は " break と" continue はいつも悪い "という信念は信じていませんし、その場合は読みやすいと思うので問題は見えません。
追加された 著者 Joachim Sauer,

Apache CollectionUtils はオプションですが、 find メソッドはそれをまったく行いません。

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
}

これはlambdaがサポートされているところで簡単に解決できる問題の1つです(ここではScala)。

mylist.find(_.name == "xxx")
0
追加された
find はオブジェクトやインデックスの Scala で何を返しますか?私はそれがオブジェクトだと思いますよね?
追加された 著者 Joachim Sauer,
はい、オブジェクトを返すか、より正確には Option - null に代わるシンラッパーです。もちろん、与えられた述語にマッチする最初の要素のインデックスを返す indexWhere()もあります。
追加された 著者 Tomasz Nurkiewicz,
ダウンホッター、説明してくれない?
追加された 著者 Tomasz Nurkiewicz,

MyClass equals()メソッドをオーバーライドして、 name フィールドが等しい場合(Stringの equal())。

0
追加された
これにより問題は解決しますが、 MyClass name 以外のプロパティで同等性を定義する必要がある場合は、ワームの可能性があります。
追加された 著者 S.L. Barth,
  1. equalsメソッドをオーバーライドして、名前を使用して同等性を比較する必要があります。また、 equals()ここをクリックしてください。

  2. indexOf()を使用して、指定された要素と一致する要素があるかどうかを確認できます。 equals()を使用します。

あなたの yourlist.indexOf(o)が一致をどのように決定するのかは次のとおりです:

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

次に、見つかったインデックス(i)に対して l.get(i)を実行できます。

0
追加された