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();
}
}