我有要消除重复对象的对象列表

下面的代码如何消除重复项

主班

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进行字符串比较,而不是按引用进行等于(==)

08-28 18:07