我有要消除重复对象的对象列表
下面的代码如何消除重复项
主班
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。
如果所有字段相等,则需要返回true,而不是书面形式的false。
使用String.equals进行字符串比较,而不是按引用进行等于(==)