从ArrayList获取重复对象

时间:2014-08-12 20:37:01

标签: java

如何从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上显示。重复的订单将由错误消息列标识。

1 个答案:

答案 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();
}