我有一个对象列表,我试图在其中消除重复的对象
下面的代码如何无法消除重复项
主类
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Rule1 {
public static void main(String[] args){
Fna fna = new Fna(1,"1","1");
Fna fna1 = new Fna(1,"1","1");
Fna fna2 = new Fna(2,"2","2");
List<Fna> fnas = new ArrayList<>();
List<Fna> fnas2 = new ArrayList<>();
fnas.add(fna);
fnas.add(fna1);
fnas.add(fna2);
System.out.println(removeDuplicates(fnas).toString());
for(Fna obj1 : fnas){
for(Fna obj2: fnas){
if(obj1.equals(obj2)) fnas.remove(obj1);
}
}
System.out.println(fnas.toString());
}
Java pojo
public class Fna {
int ID;
String name;
String lname;
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public Fna(int ID, String name, String lname) {
this.ID = ID;
this.name = name;
this.lname = lname;
}
@Override
public boolean equals(Object obj) {
if(obj == null) return false;
else if (obj instanceof Fna && getID() == ((Fna) obj).getID() && getName().equals(((Fna) obj).getName())
&& getLname().equals(((Fna) obj).getLname()))
return true;
else return false;
}
@Override
public int hashCode() {
return 0;
}
}
输出
[Fna@0, Fna@0, Fna@0]
[Fna@0, Fna@0, Fna@0]
最佳答案
equals 中的第二个比较是 getName 等于 getLName。
如果所有字段都相等且不为 false,则需要返回 true。
使用 String.equals 进行字符串比较,而不是通过引用相等 (==)
关于java - List<Object> 删除重复项,覆盖 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093435/