Usar Optional.ofNullable( obj ).map( x -> x.id ).equals( Optional.ofNullable( longNull ) );
Pra galerinha da gamb, vi um (monte de) código com comparação Long == Long, o que é errado.
No caso, a pessoa queria validar se o objeto é nulo, se o atributo é nulo e então comparar com um outro valor, que também poderia ser nulo. Por fim, fizeram a comparação de obj.getId() == idObjParam
, o que é muito zuero. Devem ter medo de que obj.getId().equals(idObjParam)
dê um null pointer exception. Compreensível, mas não tem jeito. Temos que usar o .equals()
de qualquer forma pois é uma comparação entre objetos!
O exemplo desse snippet é para mostrar como fazer isso usando um único Optional.
No caso, o equals() ali não é do próprio tipo do objeto, mas é de Optional. Sendo assim, o atributo de comparação com o equals() foi também transformado em Optional para os resultados serem mais corretos.
Testei no site https://www.jdoodle.com/online-java-compiler
O resultado foi
obj.id = null:
obj.id == null ? true
Optional.equals() is null ? true
obj.id == 5000L ? false
Optional.equals() is 5000L ? false
obj.id = 5000L:
obj.id == null ? false
Optional.equals() is null ? false
obj.id == 5000L ? false
Optional.equals() is 5000L ? true
obj = null:
Optional.equals() is null ? true
Optional.equals() is 5000L ? false
Segue o código:
import java.util.Optional;
public class MyClass {
public static void main( String args[] ) {
class Obj {
Long id;
}
Long longVal = 5000L;
Long longNull = null;
Obj obj = new Obj();
obj.id = null;
System.out.println( "obj.id = null:" );
System.out.println( " obj.id == null ? " + (obj.id == longNull) );
System.out.println( " Optional.equals() is null ? " + Optional.ofNullable( obj ).map( x -> x.id ).equals( Optional.ofNullable( longNull ) ) );
System.out.println( " obj.id == 5000L ? " + (obj.id == longVal) );
System.out.println( " Optional.equals() is 5000L ? " + Optional.ofNullable( obj ).map( x -> x.id ).equals( Optional.ofNullable( longVal ) ) );
obj.id = 5000L;
System.out.println( "\nobj.id = 5000L:");
System.out.println( " obj.id == null ? " + (obj.id == longNull) );
System.out.println( " Optional.equals() is null ? " + Optional.ofNullable( obj ).map( x -> x.id ).equals( Optional.ofNullable( longNull ) ) );
System.out.println( " obj.id == 5000L ? " + (obj.id == longVal) );
System.out.println( " Optional.equals() is 5000L ? " + Optional.ofNullable( obj ).map( x -> x.id ).equals( Optional.ofNullable( longVal ) ) );
obj = null;
System.out.println( "\nobj = null:");
System.out.println( " Optional.equals() is null ? " + Optional.ofNullable( obj ).map( x -> x.id ).equals( Optional.ofNullable( longNull ) ) );
System.out.println( " Optional.equals() is 5000L ? " + Optional.ofNullable( obj ).map( x -> x.id ).equals( Optional.ofNullable( longVal ) ) );
}
}