Чтобы сравнить разные объекты одного и того же класса с их содержимым, таким как jobTitleId, classicId, deptId & categoryId должно было быть сделано и сделать некоторые манипуляции позже с помощью Set and Map. Я смог сделать это, просто переопределив методы equals и hashCode класса Object и смог получить информацию (например, на следующей карте).Сравнение динамических полей объектов с использованием методов 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 и т.д.) могут быть динамически двигались вместе со своими значениями. Итак, насколько я понимаю, я использовал 2 класса (TableClass и ColWithData), так что List of ColWithData присутствует в объекте 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;
EDIT я вниз проголосовали , Итак, я снова внес некоторые изменения в свои требования. (Пожалуйста, помогите мне решить это)
Очень неясно, чего вы на самом деле пытаетесь достичь. Возможно, выложим для нас очень четко, какова конкретная проблема, которую вы пытаетесь решить, и ваш полный мыслительный процесс о том, как вы ее разрешите. Тогда, возможно, мы можем указать ваш код в правильном направлении. Как бы то ни было, все, что я вижу, это куча не-реализаций методов, которые, похоже, не имеют ничего общего с вашей проблемой - что бы это ни было. –
Не можете ли вы использовать карту вместо списка «ColWithData»? Было бы намного проще реализовать 'equals()' и 'hashCode()', если бы вы могли перебирать ключи карты ... –