0

How to compare two Treeset and print the same/difference elements in java.

Set<Integer> aTreeSet = new TreeSet<>();
aTreeSet.add(3);
aTreeSet.add(1);
aTreeSet.add(2);

Set<Integer> bTreeSet = new TreeSet<>();
bTreeSet.add(3);
bTreeSet.add(5);
bTreeSet.add(4);

I want output as Missing Elements in A : [1,2] Missing Elements in B : [5,4]

I tried following method which is not working as I expected.

aTreeSet.removeAll(bTreeSet);
System.out.println(aTreeSet);//[1,2]
System.out.println(bTreeSet);//[3,4,5]

please help me.

Ravi
  • 1
  • 1
    Does this answer your question? [Getting the difference between two sets](https://stackoverflow.com/questions/18644579/getting-the-difference-between-two-sets) – jrook Sep 18 '20 at 19:33
  • You are on the right track and have figured out half of the answer. `aTreeSet.removeAll(bTreeSet)` modifies `aTreeSet` (as explained in the linked Q/A). You will need to run `bTreeSet.removeAll(original_aTreeSet)` to get what you want. – jrook Sep 18 '20 at 19:36

1 Answers1

0

Hello you can do this :

Set<Integer> aTreeSet = new TreeSet<>();
aTreeSet.add(3);
aTreeSet.add(1);
aTreeSet.add(2);

Set<Integer> bTreeSet = new TreeSet<>();
bTreeSet.add(3);
bTreeSet.add(5);
bTreeSet.add(4);

final Set<Integer> aTreeSetWithoutBTreeSet = aTreeSet.stream()
    .filter(tree -> !bTreeSet.contains(tree))
    .collect(Collectors.toSet());

final Set<Integer> bTreeSetWithoutATreeSet = bTreeSet.stream()
    .filter(tree -> !aTreeSet.contains(tree))
    .collect(Collectors.toSet());

System.out.println(aTreeSetWithoutBTreeSet);//[1,2]
System.out.println(bTreeSetWithoutATreeSet);//[3,4,5]

Hope that can help you.