Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove duplicate objects in a List<MyObject> without equals/hashcode?

I have to remove duplicated objects in a List. It is a List from the object Blog that looks like this:

public class Blog {     private String title;     private String author;     private String url;     private String description;     ... } 

A duplicated object is an object that have title, author, url and description equal to other object.

And I can't alter the object. I can't put new methods on it.

How do I do this?

like image 654
Diego Faria Avatar asked Jul 13 '11 14:07

Diego Faria


People also ask

How do I remove duplicates from a list hash Set?

The easiest way to remove repeated elements is to add the contents to a Set (which will not allow duplicates) and then add the Set back to the ArrayList: List<String> al = new ArrayList<>(); // add elements to al, including duplicates Set<String> hs = new HashSet<>(); hs. addAll(al); al. clear(); al.

How do you remove duplicates from a Set of objects in Java?

Set implementations in Java has only unique elements. Therefore, it can be used to remove duplicate elements. HashSet<Integer>set = new HashSet<Integer>(list1); List<Integer>list2 = new ArrayList<Integer>(set); Above, the list2 will now have only unique elements.

What is the method of removing duplicates without the remove duplicate stage?

There are multiple ways to remove duplicates other than using Remove Duplicates Stage. As stated above you can use Sort stage, Transformer stage. In sort stage, you can enable Key Change() column and it will be useful to filter the duplicate records. You can use Aggregator stage to remove duplicates.


1 Answers

Here is the complete code which works for this scenario:

class Blog {     private String title;     private String author;     private String url;     private String description;       public String getTitle() {         return title;     }      public void setTitle(String title) {         this.title = title;     }      public String getAuthor() {         return author;     }      public void setAuthor(String author) {         this.author = author;     }      public String getUrl() {         return url;     }      public void setUrl(String url) {         this.url = url;     }      public String getDescription() {         return description;     }      public void setDescription(String description) {         this.description = description;     }      Blog(String title, String author, String url, String description)     {         this.title = title;         this.author = author;         this.url = url;         this.description = description;      }      @Override     public boolean equals(Object obj) {         // TODO Auto-generated method stub         if(obj instanceof Blog)         {             Blog temp = (Blog) obj;             if(this.title.equals(temp.title) && this.author.equals(temp.author) && this.url.equals(temp.url) && this.description.equals(temp.description))                 return true;         }         return false;     }      @Override     public int hashCode() {         // TODO Auto-generated method stub                  return (this.title.hashCode() + this.author.hashCode() + this.url.hashCode() + this.description.hashCode());             } } 

Here is the main function which will eliminate the duplicates:

public static void main(String[] args) {     Blog b1 = new Blog("A", "sam", "a", "desc");     Blog b2 = new Blog("B", "ram", "b", "desc");     Blog b3 = new Blog("C", "cam", "c", "desc");     Blog b4 = new Blog("A", "sam", "a", "desc");     Blog b5 = new Blog("D", "dam", "d", "desc");     List<Blog> list = new ArrayList();     list.add(b1);     list.add(b2);     list.add(b3);     list.add(b4);            list.add(b5);          //Removing Duplicates;     Set<Blog> s= new HashSet<Blog>();     s.addAll(list);              list = new ArrayList<Blog>();     list.addAll(s);             //Now the List has only the identical Elements } 
like image 178
Sandeep Avatar answered Sep 20 '22 13:09

Sandeep