java 比较两个对象是否相等
2020-03-08 本文已影响0人
请叫我的全名cv工程师
java 中比较两个bean对象是否相同,可以有以下几种方法
- 重新实现hashcode()方法和equals()方法
两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。
在equals ()方法中比较指定的字段 - 使用 org.apache.commons的工具类重写重新实现hashcode()方法和equals()方法
xxx部分是将指定的字段不用比较
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj,"xxxx");
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this,,"xxxx");
}
- 实现Comparable<T>接口中的compareTo()方法
返回值为 1,0.-1:
@Override
public int compareTo(Book o) {
//先按 id 再按价格 最后按书名排序 升序
int result = this.bookId - o.bookId;
if(result == 0){
result =this.bookPrice - o.bookPrice;
}
if(result == 0){
result = this.bookName.compareTo(o.bookName);
}
return result;
}
- 实现Comparator<T>接口
java 1.8之前
Collections.sort(books,new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
return o1.getBookPrice() - o2.getBookPrice();
}
});
java 1.8之后
Collections.sort(books,(Book a, Book b) -> { return a.getBookPrice()-b.getBookPrice(); });
或者可以简单的写为
Collections.sort(books,(Book a, Book b) -> a.getBookPrice()-b.getBookPrice());
甚至,我们可以不使用Collections.sort:
books.sort((Book a, Book b) -> a.getBookPrice()-b.getBookPrice() );