java - List<Object> 删除重复项,覆盖 equals

标签 java

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

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

主类

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. equals 中的第二个比较是 getName 等于 getLName。

  2. 如果所有字段都相等且不为 false,则需要返回 true。

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

关于java - List<Object> 删除重复项,覆盖 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40093435/

相关文章:

java - 错误填充异常 : Given final block not properly padded

java - Gwtbootstrap3。仅使用 java 代码引导组件 - 不使用 ui-binder

java - 调试java银行账户程序(1个错误)

java - 源代码控制intellij代码风格设置

java - 在新实体上重用 Hibernate 中的特定字段

java - 了解递归中的堆栈展开(树遍历)

java - Spring AOP 何时使用 CGLIB 代理?

java - bundle 并运行 Jar 会导致 java.lang.reflect.InitationTargetException

java - 在多个页面上打印节点

java - 使用 JDK 11 的 Apache Archiva 抛出 BeanCreationException : Error creating bean with name 'roleManager'