I have two types of user, LibraUsers and GenesysUser. Each have their own properties, but some are similar.
I need to find the differences between two lists of these types of users. Made a small program to illustrate my problem - My issue is that I have duplicate entries in my difference list, the compare method on the list does not seem to do its job. I've read that I should override the equals method, and also the hashcode (in this case of the LibraUser). I tried that using an apache function, but it did not work. The question therefore is, what are the alternatives for solving this problem?
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();
    }
}
 
     
    