2016-12-08 25 views
-1

私は配列リストを持っていますArrayList医師いくつかの医師の詳細を格納するオブジェクトを格納します。各医師には固有のIDフィールドがあります。特定のID値を持つ医者のアレイリストを検索する方法はありますか?特定のフィールド値を持つオブジェクトを見つけるためにArrayListを検索する

+0

arraylistを作成するコードを投稿できますか?多分、このデータは辞書として構造化されているでしょうか? – Stephopolis

+1

医者の識別子を対応する医者のオブジェクトに写像する 'Map 'にデータを保存する方が良いでしょう。ルックアップはエレガントで効果的になります。 –

答えて

0

このようなものを試してみてください。

private static Doctor queryDoctorById(List<Doctor> doctors, int id) { 
    Doctor doctor = null; 
    for (Doctor doc : doctors) { 
     if (doc.id == id) { 
      doctor = doc; 
      break; 
     } 
    } 
    return doctor; 
} 

// is a sample object representing doctor 
protected static class Doctor { 
    public String name; 
    public int id; 
} 
+0

私はそれがどのように動作するのか理解しているので、これを使用すると思います。みんなありがとう。 –

+0

よろしくお願いします。 – Olu

0

最も簡単な、おそらくない最も効率的な解決策は、私は)それ以外の場合は、あなたが(代わりにd.getIdのd.id使用することになり、あなたはすべてのフィールドのセッター/ゲッターと「医師」を設定仮定していますそれは良い習慣ではありません:

私はまた、IDが文字と数字を含むことができ、文字列として表されると仮定しています。それは数ある場合は、使用する==の代わりに、あなたはちょうどそうのようなArrayListの上のストリームを使用することができます.equals

public Doctor findDoctorById(desiredID) { 
    for(Doctor d : doctors) { 
     if (d.getId().equals(desiredID) { 
      return d; 
     } 
    } 
    System.out.println("No doctors with that ID!"); 
    return null; 
} 
+0

ええ、私はd.getId()を使うので、私はgetterとsetterをプライベートフィールドの値で使っていました。私のID値はintですので、if文で正しい ".equals"ではなく==を使用します。 –

+0

はい、正しいです。 "=="は数値の等価性のような完全な等価性であり、等価性は2つの文字列の比較のためのものです。 – mstorkson

2

:ここ

Optional<Doctor> getUniqueDoctorById(List<Doctor> list, String id) { 

    return list.stream() 
      .filter(doctor -> doctor.getId().equals(id)) 
      .findFirst(); 
} 

を、あなたはリストをストリーミングし、すべての医師をフィルタリング見ますdoctor idはあなたが探しているIDと同じです。

関連する問題