嵌套属性的比较

时间:2017-02-08 14:36:57

标签: java apache-commons object-comparison

假设我有两个属性Customer对象,它是具有属性ID的对象。你会如何比较这两个对象。 我试着写一些常见的java if语句,但是很长很笨拙。

我试过这样的事情

new EqualsBuilder().append(o1.getCustomer(), o2.getCustomer())
            .append(o1.getCustomer().getId(), o2.getCustomer().getId()).isEquals()

但如果一个对象的getCustomer返回null,则失败(这是针对匿名客户的对象,因此发生NullPointerException)。我怎样才能以最易读的方式编写它。我可以以某种方式利用java Optional ??

更新: 问题是我比较无法比较。 O1和o2是不同的类。在这种情况下,原始缺陷是我根本不能使用EqualsBuilder。

也许我可以使用它,这在if语句中真的不易读。

Object1 o1 = ...;
Object2 o2 = ...;
boolean equals Optional.of(o1).map(VoucherDTO::getCustomer).map(CustomerDTO::getId).orElse(0L).equals(Optional.of(o1).map(VoucherDTO::getCustomer).map(CustomerDTO::getId).orElse(0L));

1 个答案:

答案 0 :(得分:2)

以下怎么样?如果ids相等,我会认为这两个客户是平等的。

return o1.getCustomer() == null 
       ? o2.getCustomer() == null
       : o1.getCustomer().equals(o2.getCustomer())
                  &&  o1.getCustomer().getId() == o2.getCustomer().getId();
相关问题