Увидел задачу, суть которой была переопределить методы 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
AbstractQueuedSynchronizer содержит внутреннее поле state0 и 1 зарезервированы для состояния - блокировки нет, и блокировка установлена
Пытаюсь создать новый модуль для готового проекта через File>New>Module и он даже позволяет что-то создатьНо никаких src\main
пишу программу на андройд не могу понять почему мой код не выводится в "textView"
требуется со страницы http://wwwnba