런타임시 null 일 수있는 두 개의 지정된 오브젝트를 비교하려고합니다. 내 예제에서 : 유형 a1.getType()
가 null로하지 않습니다에 의해 ID로람다 비교기에서 NullPointerExceptions을 피하는 방법은 무엇입니까?
@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));
}
어설 션이, 잘 작동합니다. 이것을 피할 수있는 방법이 있습니까? 나는 Comparator.nullsLast(...)
을 시도했지만, 여기서는 요소를 정렬하지 않으므로 의미가 없습니다.
나는 단언 할 것이 많기 때문에 "one-liner"을 선호한다. 나는 람다 식을 처음 사용한다. 이 같은
부터 존재
당신이'equals' 방법을 사용하려는 해달라고 이유는 무엇입니까? – ByeBye
_Agent_ 구현을 변경할 수 없으며 hashCode/equals가 없습니다. – JaneDoe
'nullsLast'의 문제점은 무엇입니까? – immibis