2016-04-18 4 views
0

今、私はこの問題に取り組んできましたが、誰かが援助を受けることができるかどうか疑問に思っていました。私はJava GUI(最終年度の大学生のためのモジュールピッカー)を作ったので、ちょっとしたことができません。リストからオブジェクトをフィルタリングする

背景:新しいモジュールやコースを追加するのは簡単なので、ハードコーディングを避けようとしています。今私がしようとしているのは、プログラムがコースに応じて特定のモジュールをインポートできるようにすることです。それはとても些細なことであり、私はそれを汚い方法でやることができますが、私が望む方法はありません。

if(course.getCourseName() == "Computer Science") { 
     select.setModules(courses[0].getModulesOnCourse()); 
    } else if(course.getCourseName() == "Software Engineering") { 
     select.setModules(courses[1].getModulesOnCourse()); 
    } 

は今そのように動作しますが、それはハードコーディングレベル1000である彼らは道私は仕事にそれを望んでいたこれら二つのどちらかだった:彼らは今

courses.forEach(c -> {if(c.equals(course)){select.setModules(c.getModulesOnCourse())}}); 

OR

for(Course c : courses) { 
     if(c.equals(course)) {select.setModules(c.getModulesOnCourse());} 
    } 

どちらも理論的には完璧に動作するはずですが、どちらも動作しません。なぜ誰かが理由を理解するのを手伝ってくれるのか、おそらく解決策を提供することができるのだろうかと思います。簡単に私は下のすべてのファイルの要点を添付します。 ==を使用して

The gist

+0

'Course'の' equals() 'メソッドをオーバーライドしましたか? – rdonuk

答えて

1

などString Sなどのオブジェクトと良いアイデアになることはありません。常に.equalsを使用してください。

独自のカスタムオブジェクトで.equalsを使用している場合は、.equalsメソッドをオーバーライドして、2つのコースを同じにするための独自の条件を定義できるようにしてください。これをしないと、メソッドは常にfalseを返します。

+0

これはすごく感謝しました。私はequalsメソッドをオーバーライドすることを知っていますが、これが必要であることはわかりませんでした。私はすでにその方法を推測していましたが、明らかにそうではありません。ありがとうございました。私は今、将来の参照のためにも知っています! –

+0

お寄せいただきありがとうございます。興味深いことに、 'Object'の' equals'メソッドが '=='と同じであると想像するのは大抵正確です。したがって、使用される可能性があると思うなら、常にオーバーライドすべきです。 – Zircon