Compare two Arraylists which contain objects of the same class
I have two lists of different sizes which belong to the same class Student which is having attributes like:
- Integer id;
- String name;
- Integer age;
We will compare these two lists and remove the elements which are common
in both of them. Below is the example available to compare two lists:-
Student.java
public class Student {
/**
  * @author Gaurav
  *
  */
private Integer id;
private String name;
private Integer age;
public Student(Integer id, String name, Integer age){
    this.id = id;
    this.name = name;
    this.age = age;
}
public Integer getId() {
 return id;
}
public void setId(Integer id) {
 this.id = id;
}
public Integer getAge() {
 return age;
}
public void setAge(Integer age) {
 this.age = age;
}
@Override
public String toString() {
    return "Id : " + this.id +" Name : "+this.name+ " age : "+this.age;
}
public String getName() {
 return name;
}
public void setName(String name) {
 this.name = name;
}
@Override 
public boolean equals(Object obj) {
  if (obj == this) {
   return true;
  }
  if (obj == null || obj.getClass() != this.getClass()) {
   return false;
  }
  Student student = (Student) obj;
  return id == student.id
    && (name == student.name || (name != null && name
      .equals(student.getName())))
    && (age == student.age || (age != null && age
      .equals(student.getAge())));
 }
}
CompareLists.java
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
/**
 * @author Gaurav
 *
 */
public class CompareLists {
 public static void main( String[] args )
 {
    List<Student> l1 = new ArrayList<Student>();
    l1.add(new Student(1,"Kumar",33));
    l1.add(new Student(2,"Hiten",35));
    l1.add(new Student(3,"Varun",46));
    l1.add(new Student(4,"Gaurav",35));
    l1.add(new Student(5,"Vishal",40));
    List<Student> l2 = new ArrayList<Student>();
    l2.add(new Student(4,"Gaurav",35));
    l2.add(new Student(5,"Vishal",40));
    //This is the first way to compare two list containing objects of same classes and removing the common item.
    List<Student> firstList = new ArrayList<Student>(l1);
    System.out.println("First list before removing common elements");
    System.out.println(firstList);
    firstList.removeAll(l2);
    System.out.println("\nFirst list after removing common elements");
    System.out.println(firstList);
   //This is the Second way to compare two list containing objects of same classes  and removing the common item.
    List<Student> secondList = new ArrayList<Student>();
    System.out.println("\nSecond list before removing common elements");
    System.out.println(l1);
    for (int i = 0; i < l1.size(); i++){
         if (!l2.contains(l1.get(i))){
             secondList.add(l1.get(i));
         }
     }
    System.out.println("\nSecond list after removing common elements");
    System.out.println(secondList);
    //This is the Third way to compare two list containing objects of same classes  and removing the common item.
    List<Student> thirdList = new ArrayList<Student>(l1);
    System.out.println("\nThird list before removing common elements");
    System.out.println(thirdList);
    for(Student apv : l1){
   for(Student pv : l2){
    if(apv.getId() == pv.getId() && apv.getName().equalsIgnoreCase(pv.getName())){
     thirdList.remove(pv);
    }
   }
  }
    System.out.println("\nThird list after removing common elements");
    System.out.println(thirdList);
    //This is the Fourth way to compare two list containing objects of same classes  and removing the common item.
 /**org.apache.commons.collections.CollectionUtils - with the help of this class below call is possible and for this explicitly, we need to add the jar named commons-collections-3.2.1.jar*/
    System.out.println("\nFourth list after removing common elements");
    @SuppressWarnings("unchecked")
    Collection<Student> fourthList= CollectionUtils.subtract(l1, l2);
    System.out.println(fourthList);
 }
}
Result:-
First list before removing common elements
[Id : 1 Name : Kumar age : 33, Id : 2 Name : Hiten age : 35, Id : 3 Name : Varun age : 46, Id : 4 Name : Gaurav age : 35, Id : 5 Name : Vishal age : 40]
First list after removing common elements
[Id : 1 Name : Kumar age : 33, Id : 2 Name : Hiten age : 35, Id : 3 Name : Varun age : 46]
Second list before removing common elements
[Id : 1 Name : Kumar age : 33, Id : 2 Name : Hiten age : 35, Id : 3 Name : Varun age : 46, Id : 4 Name : Gaurav age : 35, Id : 5 Name : Vishal age : 40]
Second list after removing common elements
[Id : 1 Name : Kumar age : 33, Id : 2 Name : Hiten age : 35, Id : 3 Name : Varun age : 46]
Third list before removing common elements
[Id : 1 Name : Kumar age : 33, Id : 2 Name : Hiten age : 35, Id : 3 Name : Varun age : 46, Id : 4 Name : Gaurav age : 35, Id : 5 Name : Vishal age : 40]
Third list after removing common elements
[Id : 1 Name : Kumar age : 33, Id : 2 Name : Hiten age : 35, Id : 3 Name : Varun age : 46]
Fourth list after removing common elements
[Id : 1 Name : Kumar age : 33, Id : 2 Name : Hiten age : 35, Id : 3 Name : Varun age : 46]
 
No comments:
Post a Comment