Pages

Thursday, May 23, 2019

Find Unique and Duplicates Values From Two Lists

1. Overview

In this tutorial, We'll learn how to find the unique values from two lists and how to find all common or duplicates values from two lists.

We'll demonstrate using two ArrayList's to find out unique and duplicates objects in it.

To achieve our requirement, we must compare values in both list. Either we can run the loop through each list or we can use list api built in methods. We'll explore using built in api methods such as contains(), retailAll() and removeAll() methods.




Find Unique and Duplicates From Two Lists




Consider input two lists.

List 1:

List winterFruits = new ArrayList<>();
winterFruits.add("Clementine");
winterFruits.add("Plums");
winterFruits.add("Dates");
winterFruits.add("Grapefruit");
winterFruits.add("Kiwi");


List 2:

List summerFruits = new ArrayList<>();
summerFruits.add("Mango");
summerFruits.add("Plums");
summerFruits.add("Watermelon");
summerFruits.add("Papaya");
summerFruits.add("Grapefruit");

2. Duplicate

2.1 contains() method

contains(Object o) method is present in Java.util.List package.


This method returns true if the passed object is present in the list and otherwise it returns false. This method checks for the occurrence. If any passed value or object appears more then once then it will check for the first appearance. It won't check for all occurrences.

By using this method we can find both duplicate and unique elements from two lists.

List duplicateList = new ArrayList<>();
for (String fruitName : winterFruits) {
 if (summerFruits.contains(fruitName)) {
  duplicateList.add(fruitName);
 }
}

Output:

duplicateList: [Plums, Grapefruit]

2.2 retainAll method

retainAll(Collection<?> c): This method takes another list as argument. We call passed list as specified list. retainAll method keeps the values which are present in the specified and remaining values will be deleted from the current list.

winterFruits.retainAll(summerFruits);


Once retainAll method is invoked than it will check what values of summerFruits are present in winterFruits list then Keep these values untouched and removes non-equal values from winterFruits list.

Output:

winterFruits: [Plums, Grapefruit]

3. Unique

3.1 Set

Set interface does not allow duplicate values adding to it. So First we add summerFruits to winterFruits then now winterFruits is having all the values of winterFruits and summerFruits.

winterFruits.addAll(summerFruits);

Next, convert winterFruits to set.

Set uniqueValues = new HashSet<>(winterFruits);


Output:

uniqueValues [Clementine, Plums, Dates, Grapefruit, Kiwi, Mango, Watermelon, Papaya]

3.2 removeAll


removeAll(Collection<?> c): Removes from this list all of its values that are present in the specified collection.

In simple workds, Taking out duplicate values out from two lists and adding these two list into one list(winterFruits). Finally adding back the duplicate elements back to winterFruits list.

List copyOfWinterFruits = new ArrayList<>(winterFruits);
copyOfWinterFruits.retainAll(summerFruits);

winterFruits.removeAll(copyOfWinterFruits);
summerFruits.removeAll(copyOfWinterFruits);

winterFruits.addAll(summerFruits);
winterFruits.addAll(copyOfWinterFruits);

Output:

Unique List [Clementine, Dates, Kiwi, Mango, Watermelon, Papaya, Plums, Grapefruit]

Full code on GitHub

4. Custom Objects

What happens if Student or CheckOut objects are present in the list then how to find out the duplicates based on combination of id and name of student or on any condition.

In these type of sceraios, We must do the following.

A. Override equals() method in Student class if using contains() method or List methods.
B. Override both equals and hashcode methods in Student class in case of HashSet or HashMap.

5. Conclusion

In this article, We've seen how to find the duplicates values and unique values from two lists different ways.

Full programs are available on GitHub.

No comments:

Post a Comment

Please do not add any spam links in the comments section.