要比較同一類的不同對象及其內容(如jobTitleId,classificationId,deptId &),將在稍後使用Set和Map進行操作。我能夠通過重寫Object類的equals和hashCode方法來實現這一點,並能夠獲取信息(如下圖所示)。使用equals和hashCode方法比較對象的動態字段
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等)可動態地與他們的價值拉。所以,就我的理解而言,我使用了兩個類(TableClass和ColWithData),使得ColWithData的List在TableClass對象中。
我在想如果我重寫相同的兩種方法equals() & hashCode();
,使得可以實現相同。
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;
編輯我一直在下降投票。所以,我再次對我的要求做了一些修改。 (請幫我解決這個問題)
你實際上想要達到的目標很不清楚。也許可以非常清楚地告訴我們你正在努力解決的具體問題,以及你如何解決問題的全過程。那麼也許我們可以將您的代碼指向正確的方向。就目前而言,我所看到的只是一大堆沒有實現的方法,而這些方法似乎與您的問題無關 - 無論如何。 –
你不能使用Map來代替「ColWithData」列表嗎?如果你可以迭代地圖鍵,那麼實現'equals()'和'hashCode()會容易得多... –