您好我有两个自定义数组列表,我想从一个数组列表中删除与第二个数组列表匹配的类似项。
这是我正在使用的逻辑。
List<Daily_Stock_Pojo> dailyStockArrayListOne = new ArrayList<Daily_Stock_Pojo>();
List<Daily_Stock_Pojo> dailyStockArrayListTwo = new ArrayList<Daily_Stock_Pojo>();
List<Daily_Stock_Pojo> added = new ArrayList<Daily_Stock_Pojo>(dailyStockArrayListOne);
added.removeAll(dailyStockArrayListTwo);
另外一个是我的自定义类,用作数组列表的Object。
public class Daily_Stock_Pojo {
private Date Calendar_Date;
private int Store_Id;
private int Item_Id;
private int Stock_Volume;
private String MRP;
private String objectId;
public Daily_Stock_Pojo(Date calendar_Date, int store_Id, int item_Id, int stock_Volume, String MRP, String objectId) {
Calendar_Date = calendar_Date;
Store_Id = store_Id;
Item_Id = item_Id;
Stock_Volume = stock_Volume;
this.MRP = MRP;
this.objectId = objectId;
}
public Date getCalendar_Date() {
return Calendar_Date;
}
public void setCalendar_Date(Date calendar_Date) {
Calendar_Date = calendar_Date;
}
public int getStore_Id() {
return Store_Id;
}
public void setStore_Id(int store_Id) {
Store_Id = store_Id;
}
public int getItem_Id() {
return Item_Id;
}
public void setItem_Id(int item_Id) {
Item_Id = item_Id;
}
public int getStock_Volume() {
return Stock_Volume;
}
public void setStock_Volume(int stock_Volume) {
Stock_Volume = stock_Volume;
}
public String getMRP() {
return MRP;
}
public void setMRP(String MRP) {
this.MRP = MRP;
}
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
}
给我一个如何比较两个自定义数组列表的解决方案,并从第一个数组列表中删除与第二个数组列表匹配的所有项目。
答案 0 :(得分:3)
你的算法是对的。您只需要为equals()
正确定义Daily_Stock_Pojo
方法。 List#removeAll()
将使用equals()
执行匹配并删除元素。
如果您没有定义正确的equals()
,则使用Object
类中的一个定义(所有类隐式地从Object
类继承)并且实现仅检查参考文献(Object java doc for equals),并且通常不你想要的。
作为一个很好的衡量标准,您还应该定义一个hashCode()
方法来覆盖Object
中的方法。例如,如果您打算将对象用作HashMap
中的键或HashSet
中的元素,则此功能非常有用。
如果您使用像Eclipse这样的IDE,那么应该有生成这两种方法的选项。我们的想法是使用类属性来确定 2个对象是如何相同的。
修改强>
以下是Eclipse在使用菜单&#34; Source&gt; Generate hashCode()和equals()...&#34;时给出的默认实现。我选择在类中生成所有属性。如果您不希望属性成为Daily_Stock_Pojo
的身份的一部分,请将其从方法中删除。
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((Calendar_Date == null) ? 0 : Calendar_Date.hashCode());
result = prime * result + Item_Id;
result = prime * result + ((MRP == null) ? 0 : MRP.hashCode());
result = prime * result + Stock_Volume;
result = prime * result + Store_Id;
result = prime * result
+ ((objectId == null) ? 0 : objectId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Daily_Stock_Pojo other = (Daily_Stock_Pojo) obj;
if (Calendar_Date == null) {
if (other.Calendar_Date != null)
return false;
} else if (!Calendar_Date.equals(other.Calendar_Date))
return false;
if (Item_Id != other.Item_Id)
return false;
if (MRP == null) {
if (other.MRP != null)
return false;
} else if (!MRP.equals(other.MRP))
return false;
if (Stock_Volume != other.Stock_Volume)
return false;
if (Store_Id != other.Store_Id)
return false;
if (objectId == null) {
if (other.objectId != null)
return false;
} else if (!objectId.equals(other.objectId))
return false;
return true;
}
注意: 您应该应用Java约定标准,即
Date Calendar_Date;
public Date getCalendar_Date() {
return Calendar_Date;
}
应该是:
Date calendarDate;
public Date getCalendarDate() {
return calendarDate;
}
类成员以小写字母开头。类成员或类名中没有连字符。使用CamelCase
(对于类名称)或camelCase
(对于成员名称)。
答案 1 :(得分:1)