List <object>删除重复项,覆盖等于

时间:2016-10-17 18:40:52

标签: java

我有一个对象列表,我试图消除重复的对象

以下代码如何消除重复

MAIN CLASS

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]

1 个答案:

答案 0 :(得分:1)

  1. 你在equals中的第二个比较是getName等于getLName。

  2. 如果所有字段都相同,则需要返回true,而不是写为false。

  3. 使用String.equals进行字符串比较而不是引用相等(==)