Java 从ArrayList获取重复的对象
如何从ArrayList中获取副本Java 从ArrayList获取重复的对象,java,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 v
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);
}
}
List duplicateList=new ArrayList();
List nonDuplicateList=新建ArrayList();
Set=newhashset();
对于(订单:列表包含所有订单){
如果(!set.add(订单)){
重复列表。添加(订单);
}否则{
非重复列表。添加(顺序);
}
}
我想实现duplicateList和nonDuplicateList,在这里我将把重复列表和非重复列表结合在一起
并显示在UI上。重复订单将通过错误消息列进行标识。如果我理解您的意思,那么您可以替换此订单
if (!set1.add(order)) {
与
编辑
您需要在顺序中重写equals()
和hashCode()
。假设具有相同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();
}
如果我理解你的意思,那么你可以替换这个
if (!set1.add(order)) {
与
编辑
您需要在顺序中重写equals()
和hashCode()
。假设具有相同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();
}
你应该想想你的功能在做什么。使用调试器单步执行程序非常有用。虽然我可能会采取更简单的方法,只是打印一些东西。不管是哪种方式,都要了解您的流程。您的Order
类是否正确地实现了hashCode
和equals
?如果没有,那么你永远不会让add方法返回true,除非它们是完全相同的对象Object@user3810342请发布您的订单
课程。@user3810342嘿!我加入了我的班级。如果你需要任何信息,请告诉我。我真的很感谢你帮我解决这个问题。你应该想想你的函数在做什么。使用调试器单步执行程序非常有用。虽然我可能会采取更简单的方法,只是打印一些东西。不管是哪种方式,都要了解您的流程。您的Order
类是否正确地实现了hashCode
和equals
?如果没有,那么你永远不会让add方法返回true,除非它们是完全相同的对象Object@user3810342请发布您的订单
课程。@user3810342嘿!我加入了我的班级。如果你需要任何信息,请告诉我。我真的很感谢你帮我解决这个问题,真奇怪。除非重复的元素是相同的对象引用,否则上面的代码应该可以正常工作。这很奇怪。除非重复的元素是相同的对象引用,否则上述代码应按预期工作。