我有一个具有多个字段的汇编类。
我需要根据装配代码从装配对象列表中删除装配类的重复对象,但是在删除之前,我需要将装配数量添加到匹配的装配对象的数量中。
package com.company;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Assembly> assemblies = new ArrayList<>();
assemblies.add(new Assembly("abc1", 3.0));
assemblies.add(new Assembly("abc2", 6.0));
assemblies.add(new Assembly("abc3", 8.4));
assemblies.add(new Assembly("abc4", 9.0));
assemblies.add(new Assembly("abc1", 4.2));
assemblies.add(new Assembly("abc1", 6.3));
System.out.println("List with duplicates: "+assemblies);
HashSet<String> assmCode=new HashSet<>();
assemblies.removeIf(e->!assmCode.add(e.getAssemblyCode())); //remove the last two abc1
//but i need to add 4.2, 6.3 to 3.0 before removing
System.out.println("List without duplicates: "+assemblies);
}
}
class Assembly{
private String assemblyCode;
private double assemblyQty;
//There will be more such fields
public Assembly(String assemblyCode, double assemblyQty) {
this.assemblyCode = assemblyCode;
this.assemblyQty = assemblyQty;
}
public String getAssemblyCode() {
return assemblyCode;
}
public void setAssemblyCode(String assemblyCode) {
this.assemblyCode = assemblyCode;
}
public double getAssemblyQty() {
return assemblyQty;
}
public void setAssemblyQty(double assemblyQty) {
this.assemblyQty = assemblyQty;
}
@Override
public String toString() {
return "Assembly{" +
"assemblyCode='" + assemblyCode + '\'' +
", assemblyQty=" + assemblyQty +
'}';
}
}
[请让我知道在删除重复的对象之前是否可以进行此类操作。我是Java的Collection API的新手,所以很抱歉提出问题解决方案是否简单的问题。
当前,您使用Set<String>
“记住”已添加的值。将其更改为Set<Assembly>
。
然后您需要在equals
中实现Assembly
,以便在比较Set
是否已存在该条目时,同时考虑code
和quantity
:
class Assembly {
private String assemblyCode;
private double assemblyQty;
//the other stuff here
@Override
public boolean equals(Object o) {
//error handling here
Assembly a = (Assembly)o;
return assemblyCode.equals(a.assemblyCode)
&& assemblyQty == a.assemblyQty;
}
}
然后将设置用法更改为
HashSet<Assembly> assmCode=new HashSet<>();
assemblies.removeIf(e->!assmCode.add(e));