И что не так с реализацией сравнительных методов.
Вывод
Lists:
0. true l: com.javarush.task.task21.task2105.Solution@821 r: com.javarush.task.task21.task2105.Solution@821
1. true l: com.javarush.task.task21.task2105.Solution@7df r: com.javarush.task.task21.task2105.Solution@7df
2. true l: com.javarush.task.task21.task2105.Solution@42 r: com.javarush.task.task21.task2105.Solution@42
3. true l: com.javarush.task.task21.task2105.Solution@0 r: com.javarush.task.task21.task2105.Solution@0
4. false l: com.javarush.task.task21.task2105.Solution@65400e0 r: com.javarush.task.task21.task2105.Solution@cef84380
Set:
true
true
true
true
false
package com.javarush.task.task21.task2105;
import java.util.*;
/*
Исправить ошибку. Сравнение объектов
*/
public class Solution {
private final String first, last;
public Solution(String first, String last) {
this.first = first;
this.last = last;
}
public boolean equals(Object o) {
if (o == null)
return false;
if (o == this)
return true;
if (!(o instanceof Solution) || o.hashCode() != this.hashCode())
return false;
Solution solution = (Solution) o;
boolean equals = (first == null) ? solution.first == null : Objects.equals(solution.first, first);
equals &= (last == null) ? solution.last == null : Objects.equals(solution.last, last);
return equals;
}
public int hashCode() {
int hashCode = 0;
if (first != null)
hashCode += first.hashCode() * 31;
if (last != null)
hashCode += last.hashCode();
return hashCode;
}
public static void main(String[] args) {
List<Solution> leftList = Arrays.asList(
new Solution(new String("A"), new String("B")),
new Solution(new String("A"), null),
new Solution(null, new String("B")),
new Solution(null, null),
new Solution("left", "left")
);
List<Solution> rightList = Arrays.asList(
new Solution(new String("A"), new String("B")),
new Solution(new String("A"), null),
new Solution(null, new String("B")),
new Solution(null, null),
new Solution("right", "right")
);
System.out.println("Lists:");
for (int i = 0; i < leftList.size(); i++) {
System.out.printf("%d. %-8b l: %-51s r: %-51s%n", i, leftList.get(i).equals(rightList.get(i)), leftList.get(i), rightList.get(i));
}
System.out.println("\nSet:");
Set<Solution> leftSet = new HashSet<>(leftList);
for (Solution rightItem : rightList) {
System.out.println(leftSet.contains(rightItem));
}
}
}