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?
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.
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.
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.
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 }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With