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.
Consider input two lists.
List 1:
ListwinterFruits = new ArrayList<>();
winterFruits.add("Clementine");
winterFruits.add("Plums");
winterFruits.add("Dates");
winterFruits.add("Grapefruit");
winterFruits.add("Kiwi");
List 2:
ListsummerFruits = 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.
ListduplicateList = 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.
SetuniqueValues = 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.
ListcopyOfWinterFruits = 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.
0 Comments