如何从ArrayList中获取重复项?
public class Order {
private String portId;
private String action;
private String idType;
private String id;
private BigDecimal amount;
public String getPortId() {
return portId;
}
public void setPortId(String portId) {
this.portId = portId;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getIdType() {
return idType;
}
public void setIdType(String idType) {
this.idType = idType;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
}
我的代码:
List<Order> duplicateList = new ArrayList<Order>();
List<Order> nonDuplicateList = new ArrayList<Order>();
Set<Order> set = new HashSet<Order>();
for (Order order : listContainingAllOrders) {
if (!set.add(order)) {
duplicateList.add(order);
} else {
nonDuplicateList.add(order);
}
}
我想实现duplicateList和nonDuplicateList,我将把重复列表和非重复列表结合在一起 并在UI上显示。重复的订单将由错误消息列标识。
答案 0 :(得分:4)
如果我了解你,那么你可以替换这个
if (!set1.add(order)) {
与
if (!set1.contains(order)) {
set1.add(order);
修改强>
您需要覆盖equals()
中的hashCode()
和Order
。假设具有相同id
的订单在定义上是相同的 - 一种可能的方式是,
@Override
public boolean equals(Object obj) {
if (obj instanceof Order) {
if (id == null) {
// return ((Order) obj).id == null;
return false; // probably best to prevent null
}
return id.equals(((Order) obj).id);
}
return false;
}
@Override
public int hashCode() {
return id.hashCode();
}