Chcę porównać dwa dane obiekty, które mogą być zerowe w czasie wykonywania. W moim przykładzie:Jak uniknąć wyjątków NullPointerExceptions w komparatory lambda?
@Test
public void shouldCompareAgents() {
Agent a1 = new Agent();
a1.setId("4711");
a1.setType(null);
Agent a2 = new Agent();
a2.setId(a1.getId());
a2.setType(a1.getType());
assertEquals("Agent.getId", 0,
Comparator.comparing(Agent::getId).compare(a1, a2));
assertEquals("Agent.getType", 0,
Comparator.comparing(Agent::getType).compare(a1, a2));
}
Twierdzenie o id działa prawidłowo, przez typ nie jako a1.getType()
jest null. Czy istnieje sposób, aby tego uniknąć? Próbowałem Comparator.nullsLast(...)
, ale to nie ma sensu, ponieważ nie sortuję tutaj elementów.
Mam wiele zapewnień do zrobienia, więc wolałbym "jedno-liniowy". Jestem nowy w wyrażeniach lambda.
Dlaczego nie chcesz używać 'metody equals'? – ByeBye
Nie mogę zmienić implementacji _Agent_ i nie ma parametru hashCode/equals. – JaneDoe
Co jest nie tak z 'nullsLast'? – immibis