Java 重写自定义对象的相等项(由列表的contains方法调用)

Java 重写自定义对象的相等项(由列表的contains方法调用),java,compare,Java,Compare,我有两种类型的用户,LibraUsers和GenesysUser。每一种都有自己的属性,但有些是相似的 我需要找出这类用户的两个列表之间的差异。制作了一个小程序来说明我的问题-我的问题是,我的差异列表中有重复的条目,列表上的比较方法似乎没有起到作用。我已经读到我应该重写equals方法,以及hashcode(在LibraUser的例子中)。我尝试使用apache函数实现,但没有成功。 因此,问题是,解决这一问题的备选方案是什么 import java.util.ArrayList; import

我有两种类型的用户,LibraUsers和GenesysUser。每一种都有自己的属性,但有些是相似的

我需要找出这类用户的两个列表之间的差异。制作了一个小程序来说明我的问题-我的问题是,我的差异列表中有重复的条目,列表上的比较方法似乎没有起到作用。我已经读到我应该重写equals方法,以及hashcode(在LibraUser的例子中)。我尝试使用apache函数实现,但没有成功。 因此,问题是,解决这一问题的备选方案是什么

import java.util.ArrayList;
import java.util.List;

// one class needs to have a main() method
public class HelloWorld {
    public static List<LibraUser> libraUsers = new ArrayList<LibraUser>();
    public static List<GenesysUser> genesysUsers = new ArrayList<GenesysUser>();
    public static List<LibraUser> difference = new ArrayList<LibraUser>();

    public static void initialiseGenesysUsers() {
        // GenesysUser(String alias, String firstname, String lastname, String email)
        genesysUsers.add(new GenesysUser("Donna", "Donna", "Paulsen", "donna@gmail.com", true));
        genesysUsers.add(new GenesysUser("TheHarv", "Harvey", "Specter", "harvey@gmail.com", true));
        genesysUsers.add(new GenesysUser("Rache", "Rachel", "Zane", "rachel@gmail.com", true));
        genesysUsers.add(new GenesysUser("Mike", "Mike", "Ross", "mike@gmail.com", true));
    }

    public static void initialiseLibraUsers() {
        // LibraUser(String name, String email, String telephone) {
        libraUsers.add(new LibraUser("Louis", "louis@gmail.com", "0447521082"));
        libraUsers.add(new LibraUser("Jessica", "jessica@gmail.com", "0447521044"));
        libraUsers.add(new LibraUser("Mike", "mike@gmail.com", ""));
    }

    public static void getDifference() {
        for (LibraUser librauser : libraUsers) {
            for (GenesysUser genesysuser : genesysUsers) {
                String genusername = genesysuser.getFirstname();
                LibraUser dummy = new LibraUser(genusername, genesysuser.getEmail(), "");
                if (!difference.contains(dummy)) {
                    // do the actual comparison using the relevant keys and insert into a new list
                    if (!librauser.getUsername().equals(genusername)) {
                        difference.add(dummy);
                    }
                }
            } // inner for loop
        }// outer for loop
    }

    public static void printDifference() {
        for (LibraUser usr : difference) {
            System.out.println(usr.getUsername());
        }
    }

    // arguments are passed using the text field below this editor
    public static void main(String[] args) {
        initialiseGenesysUsers();
        initialiseLibraUsers();

        getDifference();
        printDifference();
    }
}

public class GenesysUser {
    private String Alias;
    private String Firstname;
    private String Lastname;
    private String Email;
    private boolean Active;

    public GenesysUser(String alias, String firstname, String lastname, String email, boolean active) {
        Alias = alias;
        Firstname = firstname;
        Lastname = lastname;
        Email = email;
        Active = active;
    }

    public String getAlias() {
        return Alias;
    }

    public String getFirstname() {
        return Firstname;
    }

    public String getLastname() {
        return Lastname;
    }

    public String getEmail() {
        return Email;
    }

    public void setAlias(String alias) {
        Alias = alias;
    }

    public void setFirstname(String firstname) {
        Firstname = firstname;
    }

    public void setLastname(String lastname) {
        Lastname = lastname;
    }

    public void setEmail(String email) {
        Email = email;
    }

    public void setActive(boolean active) {
        Active = active;
    }

    public boolean getActive() {
        return Active;
    }
}

public class LibraUser {
    private String username;
    private String email;
    private String telephone;

    public LibraUser(String username, String email, String telephone) {
        this.username = username;
        this.email = email;
        this.telephone = telephone;
    }

    public String getUsername() {
        return this.username;
    }

    public String getEmail() {
        return this.email;
    }

    public String getTelephone() {
        return this.telephone;
    }

    public void setName(String username) {
        this.username = username;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    @Override
    public boolean equals(Object o) {
        if (o == this)
            return true;
        if (!(o instanceof LibraUser)) {
            return false;
        }

        LibraUser user = (LibraUser) o;

        return new EqualsBuilder()
            .append(username, user.getUsername())
            .append(email, user.getEmail())
            .isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37)
            .append(username)
            .append(email)
            .toHashCode();
    }
}
import java.util.ArrayList;
导入java.util.List;
//一个类需要有一个main()方法
公共类HelloWorld{
public static List libraylist users=new ArrayList();
public static List genesysUsers=new ArrayList();
public static List difference=new ArrayList();
public static void initialiseGenesysUsers(){
//GenesysUser(字符串别名、字符串名、字符串名、字符串电子邮件)
添加(新的GenesysUser(“Donna”、“Donna”、“Paulsen”)donna@gmail.com“,对”);
添加(新的GenesysUser(“TheHarv”、“Harvey”、“Specter”),“harvey@gmail.com“,对”);
添加(新的GenesysUser(“Rache”、“Rachel”、“Zane”),“rachel@gmail.com“,对”);
添加(新的GenesysUser(“Mike”、“Mike”、“Ross”),”mike@gmail.com“,对”);
}
公共静态void initialiseLibraryUsers(){
//LibraUser(字符串名称、字符串电子邮件、字符串电话){
添加(新的LibraUser(“Louis”louis@gmail.com", "0447521082"));
添加(新的LibraUser(“Jessica”)jessica@gmail.com", "0447521044"));
添加(新的LibraUser(“Mike”mike@gmail.com", ""));
}
公共静态void get差额(){
用于(LibraUser LibraUser:libraUsers){
for(GenesysUser GenesysUser:genesysUsers){
字符串genuername=genesysuser.getFirstname();
LibraUser dummy=新的LibraUser(genuername,genesysuser.getEmail(),“”);
如果(!差异包含(虚拟)){
//使用相关键进行实际比较,并插入新列表
如果(!librauser.getUsername().equals(GenuerName)){
差异。添加(虚拟);
}
}
}//内部for循环
}//外循环
}
公共静态void print差分(){
用于(用户usr:差异){
System.out.println(usr.getUsername());
}
}
//使用此编辑器下面的文本字段传递参数
公共静态void main(字符串[]args){
initialiseGenesysUsers();
initialiseLibraUsers();
getDifference();
打印差异();
}
}
公共类GenesysUser{
私有字符串别名;
私有字符串名;
私有字符串Lastname;
私人字符串电子邮件;
私有布尔激活;
public GenesysUser(字符串别名、字符串名、字符串名、字符串电子邮件、布尔激活){
别名=别名;
名字=名字;
Lastname=Lastname;
电子邮件=电子邮件;
主动=主动;
}
公共字符串getAlias(){
返回别名;
}
公共字符串getFirstname(){
返回名字;
}
公共字符串getLastname(){
返回姓氏;
}
公共字符串getEmail(){
回复邮件;
}
public void setAlias(字符串别名){
别名=别名;
}
public void setFirstname(字符串firstname){
名字=名字;
}
public void setLastname(字符串lastname){
Lastname=Lastname;
}
公用电子邮件(字符串电子邮件){
电子邮件=电子邮件;
}
public void setActive(布尔激活){
主动=主动;
}
公共布尔getActive(){
主动返回;
}
}
公共类用户{
私有字符串用户名;
私人字符串电子邮件;
专用串电话;
公共用户(字符串用户名、字符串电子邮件、字符串电话){
this.username=用户名;
this.email=电子邮件;
这个电话;
}
公共字符串getUsername(){
返回此用户名;
}
公共字符串getEmail(){
返回此电子邮件;
}
公共字符串getTelephone(){
把这个电话还给我;
}
public void setName(字符串用户名){
this.username=用户名;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公用电话(串电话){
这个电话;
}
@凌驾
公共布尔等于(对象o){
如果(o==这个)
返回true;
如果(!(用户的实例)){
返回false;
}
LibraUser=(LibraUser)o;
返回新的EqualBuilder()
.append(用户名,user.getUsername())
.append(电子邮件,user.getEmail())
.isEquals();
}
@凌驾
公共int hashCode(){
返回新的HashCodeBuilder(17,37)
.append(用户名)
.append(电子邮件)
.toHashCode();
}
}

您需要使用.equals而不是==来测试等式

if(librauser.getUsername() != genusername)
应替换为

if(!librauser.getUsername().equqls(genusername))

…承认这是一个错误,更大的问题仍然存在…我将我的实际代码复制并粘贴到我的虚拟代码以提供更多信息。用户应该是LibraUser。我只是尝试了你的方法-除非我将同一用户添加到两个列表中(genesys和libra)当我添加这一行时,例如:libraUsers.add(newlibrauser(“Mike”),”mike@gmail.com“,”);嘿,汤姆,长话短说-我做了一个模型来问这个问题,我让模型工作了。但是当我在我的工作项目代码中做同样的事情时,它