java getclass 相等_Java判断2个List集合是否相等(不考虑元素的顺序)
現在有兩個對象,他們的一個屬性是list,很明顯兩個對象的list里面的對象,都是相等的,只是這2個list里面的順序不一致,導致這2個對象被判斷為不相等啦,這就是問題,現在要解決這個問題。
問題圖如下:
可以看到這2個對象的呢個list屬性里面數據,咱看起來是一樣的,但是經過equals之后,返回的是false。
所以,需要自己重寫equals方法和hashcode方法,這2個方法一般是一起重寫的。
然后,問題的關鍵就在于,怎么判斷2個list集合是否相等。不考慮順序。
看代碼:
先是這2個對象的代碼
TableMetaData
package com.lxk.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Collection;
import java.util.Objects;
/**
* Table metadata.
*
* @author lxk
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TableMetaData {
private Collection columnMetaData;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
TableMetaData that = (TableMetaData) o;
if (columnMetaData.size() != that.getColumnMetaData().size()) {
return false;
}
return columnMetaData.containsAll(that.getColumnMetaData());
}
@Override
public int hashCode() {
return Objects.hash(columnMetaData);
}
}
然后是,list里面裝的對象的代碼
package com.lxk.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Objects;
/**
* Column metadata.
*
* @author lxk
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public final class ColumnMetaData {
private String columnName;
private String columnType;
private boolean primaryKey;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ColumnMetaData that = (ColumnMetaData) o;
return primaryKey == that.primaryKey &&
Objects.equals(columnName, that.columnName) &&
Objects.equals(columnType, that.columnType);
}
@Override
public int hashCode() {
return Objects.hash(columnName, columnType, primaryKey);
}
@Override
public String toString() {
return "ColumnMetaData{" +
"columnName='" + columnName + ''' +
", columnType='" + columnType + ''' +
", primaryKey=" + primaryKey +
'}';
}
}
最后就是main方法啦
package com.lxk.commonTest;
import com.google.common.collect.Lists;
import com.lxk.model.ColumnMetaData;
import com.lxk.model.TableMetaData;
import java.util.Collection;
/**
* 測試equals的各種情況
*
* @author lxk on 2018/9/17
*/
public class EqualsTest {
public static void main(String[] args) {
testCollectionEqual();
}
/**
* 比較2個集合是否是相同的,不考慮集合的順序,只要里面的元素確實相同即可。
*/
private static void testCollectionEqual() {
ColumnMetaData c1 = new ColumnMetaData("age1", "name", true);
ColumnMetaData c2 = new ColumnMetaData("age2", "name", true);
ColumnMetaData c3 = new ColumnMetaData("age3", "name", true);
ColumnMetaData c4 = new ColumnMetaData("age4", "name", true);
Collection list1 = Lists.newArrayList(c1, c2, c3);
Collection list2 = Lists.newArrayList(c2, c3, c1);
TableMetaData table1 = new TableMetaData(list1);
TableMetaData table2 = new TableMetaData(list2);
boolean equals = table1.equals(table2);
System.out.println(equals);
}
}
如上操作之后,這個判斷就可以得到2個對象,是真的相等啦,不會因為list里面值的順序不一致,而返回false啦。
這個問題簡單嗎,簡單就簡單吧,我就喜歡簡單的問題。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
總結
以上是生活随笔為你收集整理的java getclass 相等_Java判断2个List集合是否相等(不考虑元素的顺序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双链表java实现_双链表 Java实现
- 下一篇: 福鼎白茶的功效与作用、禁忌和食用方法