同じクラスのさまざまなオブジェクトを jobTitleId、classificationId、deptId、classificationId などのコンテンツと比較し、後で Set と Map を使用していくつかの操作を行う必要がありました。Object クラスの equals メソッドと hashCode メソッドをオーバーライドするだけで、これを行うことができ、情報を取得できました (次の Map のように)。
Map<LocationData, List<LocationData>>
以下は、私が使用したクラスです (問題の説明のために参照できるように、これを示しています)。
LocationData クラス
package com.astreait.bulkloader;
public class LocationData {
String locId, deptId, jobTitleId, classificationId;
@Override
public boolean equals(Object obj) {
LocationData ld = (LocationData)obj;
return this.deptId.equals(ld.deptId) && this.jobTitleId.equals(ld.jobTitleId) && this.classificationId.equals(ld.classificationId) &&
this.locId.equals(ld.locId);
}
@Override
public int hashCode() {
return deptId.hashCode() + jobTitleId.hashCode() + classificationId.hashCode() +locId.hashCode();
}
}
問題:
このオブジェクトのどのフィールドと比較する必要があるかは既にわかっています。つまり、classificationId、deptId、jobTitleId、locId などの変数を使用する必要があります。
必要: フィールド名 (classificationId、deptId、jobTitleId & locId など) をその値とともに動的に取得できるように、このロジックをカスタマイズする必要があります。したがって、私の理解では、ColWithData のリストが TableClass オブジェクトに存在するように、2 つのクラス (TableClass と ColWithData) を使用しました。
equals() & hashCode();
同じことが達成できるように同じ2つのメソッドをオーバーライドするとどうなるか考えています。
TableClass class #1
class TableClass{
List<ColWithData> cwdList;
@Override
public boolean equals(Object obj) {
boolean returnVal = false;
// I need to have the logic to be defined such that
// all of the dynamic fields can be compared
return returnVal;
}
@Override
public int hashCode() {
int returnVal = 0;
// I need to have the logic to be defined such that
// all of the dynamic fields can be found for their individual hashCodes
return returnVal;
}
}
ColWithData クラス #2
class ColWithData{
String col; // here the jobTitleId, classificationId, deptId, locId or any other more fields info can come.
String data; // The corresponding data or value for each jobTitleId, classificationId, deptId, locId or any other more fields.
}
私が正しい方向に進んでいるのか、それとも他のアプローチをとるべきなのか教えてください。現在のアプローチを使用しても問題ない場合、equals メソッドと hashCode メソッドで何を実行する必要がありますか?
最後に、マップを次のように作成する必要があります (作成方法は問題ではありませんが、このロジックからの望ましい結果と見なすことができます)。
Map<TableClass, List<TableClass>> finalMap;
編集私は反対票を投じました。そのため、要件に合わせていくつかの変更を加えました。(これを解決するのを手伝ってください)