Я пытаюсь создать редактор для редактирования нескольких устройств, выбранных в JTree.
Если все элементы в Коллекции имеют одно и то же значение для определенного поля, я отобразлю это значение в форме редактора.Если они имеют разные значения, я буду отображать «Несколько значений»
Я пытался использовать что-то подобное, но это ограничивается сравнением двух элементов.Я хочу сделать это для всех предметов в коллекции.
private static List<String> difference(Student s1, Student s2) {
List<String> values = new ArrayList<>();
for (Field field : s1.getClass().getDeclaredFields()) {
// You might want to set modifier to public first (if it is not public yet)
field.setAccessible(true);
Object value1 = field.get(s1);
Object value2 = field.get(s2);
if (value != null && value != null) {
System.out.println(field.getName() + "=" + value1);
System.out.println(field.getName() + "=" + value2);
if (!Objects.equals(value1, value2) {
values.add(value2);
}
}
}
return values;
}
Может ли кто-нибудь привести пример того, как вы определяете поля, которые имеют одинаковые значения для объектов в коллекции?
Мой код Hash and Equals указан ниже.Я предполагаю, что это может быть достигнуто с использованием встроенных методов Collection, но я был бы признателен за пример.
@Override
public int hashCode() {
int hash = 5;
hash = 47 * hash + (this.isSelected ? 1 : 0);
hash = 47 * hash + Objects.hashCode(this.user);
hash = 47 * hash + Objects.hashCode(this.password);
hash = 47 * hash + Objects.hashCode(this.address);
hash = 47 * hash + (int) (this.addressAsLong ^ (this.addressAsLong >>> 32));
hash = 47 * hash + this.port;
hash = 47 * hash + Objects.hashCode(this.vendor);
hash = 47 * hash + Objects.hashCode(this.model);
hash = 47 * hash + Objects.hashCode(this.OS);
hash = 47 * hash + Objects.hashCode(this.description);
hash = 47 * hash + Objects.hashCode(this.version);
hash = 47 * hash + Objects.hashCode(this.hostName);
hash = 47 * hash + Objects.hashCode(this.domain);
hash = 47 * hash + Objects.hashCode(this.deviceType);
hash = 47 * hash + Objects.hashCode(this.Location);
hash = 47 * hash + Objects.hashCode(this.SerialNumber);
// hash = 47 * hash + Objects.hashCode(this.parent);
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final DefaultDevice other = (DefaultDevice) obj;
if (this.isSelected != other.isSelected) {
System.out.println("isSelected");
return false;
}
if (this.addressAsLong != other.addressAsLong) {
// System.out.println("long");
return false;
}
if (this.port != other.port) {
//System.out.println("port");
return false;
}
if (!Objects.equals(this.user, other.user)) {
// System.out.println("user");
return false;
}
if (!Objects.equals(this.password, other.password)) {
//System.out.println("pass");
return false;
}
if (!Objects.equals(this.vendor, other.vendor)) {
//System.out.println("ven");
return false;
}
if (!Objects.equals(this.model, other.model)) {
//System.out.println("mod");
return false;
}
if (!Objects.equals(this.OS, other.OS)) {
// System.out.println("os");
return false;
}
if (!Objects.equals(this.description, other.description)) {
//System.out.println("des");
return false;
}
if (!Objects.equals(this.version, other.version)) {
//System.out.println("ver");
return false;
}
if (!Objects.equals(this.hostName, other.hostName)) {
// System.out.println("hostNa");
return false;
}
if (!Objects.equals(this.domain, other.domain)) {
// System.out.println("dom");
return false;
}
if (!Objects.equals(this.deviceType, other.deviceType)) {
// System.out.println("dt");
return false;
}
if (!Objects.equals(this.Location, other.Location)) {
//System.out.println("loc");
return false;
}
if (!Objects.equals(this.SerialNumber, other.SerialNumber)) {
// System.out.println("sn");
return false;
}
return true;
}