0

I have two array lists and I need to:

  1. Compare them
  2. Remove duplicates based on the priority in both lists
  3. Display the final list

My requirement is to compare two lists and remove duplicates and arrange elements based on their priority. Can someone help on this?

SampleDTO.java

private String id;

public String getId() {
        return id;
}
public void setId(String id) {
        this.id= id;
}

RemoveDuplciatesAndArrange.java

//List1 Array
List<SampleDTO> list1 = new ArrayList<SampleDTO>();
SampleDTO dto1 = new SampleDTO();
dto1.setId("20504");
SampleDTO dto2 = new SampleDTO();
dto2.setId("20502");
SampleDTO dto3 = new SampleDTO();
dto3.setId("5608287");
SampleDTO dto4 = new SampleDTO();
dto4.setId("37666");
SampleDTO dto5 = new SampleDTO();
dto5.setId("19432");
SampleDTO dto6 = new SampleDTO();
dto6.setId("28454315");
SampleDTO dto7 = new SampleDTO();
dto7.setId("33937");

list1.add(dto1);
list1.add(dto2);
list1.add(dto3);
list1.add(dto4);
list1.add(dto5);
list1.add(dto6);
list1.add(dto7);

//List2 Array
List<SampleDTO> list2 = new ArrayList<SampleDTO>();
SampleDTO dto5 = new SampleDTO();
dto5.setId("37666");
SampleDTO dto6 = new SampleDTO();
dto6.setId("33937");
SampleDTO dto7 = new SampleDTO();
dto7.setId("19432");


list2.add(dto5);
list2.add(dto6);
list2.add(dto7);

Duplicate items are: {"37666","33937","19432"}. But if you consider the position of the duplicate entries, list2 taking precedence than list1

The final output should be:

{"20504","20502","5608287","37666 (from list2)","22185","80165777","36473","28454315","19432 (from list2)","33937 (from list2)"}

zaerymoghaddam
  • 3,037
  • 1
  • 27
  • 33
srini
  • 1
  • What is it that shall be compared? use removeAll method on list to remove duplicates. https://docs.oracle.com/javase/8/docs/api/java/util/List.html#removeAll-java.util.Collection- – Jack Flamp Dec 19 '17 at 12:19

1 Answers1

0

To solve the problem of duplicates try with this:

if(!list1.contains(dtoX)){
list1.add(dtoX);
}
Fabio
  • 1
  • This is quite naive, as it doesn't take into consideration that would require lookup of each element. If lists are quite long, a more effective approach would be: `LinkedHashSet mySet = new LinkedHashSet(list2); mySet.addAll(list1); ArrayList finalList = new ArrayList(mySet);` That's assuming order is of no importance... – Lior Chaga Dec 19 '17 at 13:51
  • Another elegant solution in java 8: https://stackoverflow.com/a/30867713/2204206 – Lior Chaga Dec 19 '17 at 13:59