Увидел задачу, суть которой была переопределить методы equals и hashcode чтобы сравнение объектов работало правильно. Так вот, что значит эта строка?
if (first != null ? !first.equals(solution.first) : solution.first != null)
return false;
public class Solution {
private final String first, last;
public Solution(String first, String last) {
this.first = first;
this.last = last;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Solution solution = (Solution) o;
if (first != null ? !first.equals(solution.first) : solution.first != null)
return false;
if (last != null ? !last.equals(solution.last) : solution.last != null)
return false;
return true;
}
@Override
public int hashCode() {
int result = first != null ? first.hashCode() : 0;
result = 31 * result + (last != null ? last.hashCode() : 0);
return result;
}
public static void main(String[] args) {
Set<Solution> s = new HashSet<>();
s.add(new Solution("Mickey", "Mouse"));
System.out.println(s.contains(new Solution("Mickey", "Mouse")));
}
}
Тернарный оператор, как аргумент условного оператора - довольно забавно.
Вся строка эквивалентна классической записи:
if (first != null) {if (!first.equals(solution.first) return false;}
else {if (solution.first != null) return false;}
Тернарный оператор вида (условие)? оператор1: оператор2; проверяет условие перед знаком вопроса и если оно истинно - выполняется оператор1 иначе выполняется оператор2. В данном конкретном коде подставляется одно из условий проверки в условный оператор if, в зависимости от того равно first null или нет.
если first = !null будет сформирован оператор:
if (!first.equals(solution.first) return false;
иначе, если first == null, будет сформирован оператор:
if (solution.first != null) return false;
Это тернарный оператор
(условие)?(вернуть это если условие верно):(вернуть это если условие не верно)
Пример
int x = 42;
int i = x == 42 ? 42 : -1; //в итоге i присваивается 42
Сборка персонального компьютера от Artline: умный выбор для современных пользователей