public static Set<String> minus(Collection<String> list1, Collection<String> list2) {
        HashSet<String> s1 = new HashSet<>(list1);
        s1.removeAll(list2);
        return s1;
    }
@Test
    public void testMinus() {
        String topicName1 = "persistent://my-property/my-ns/pattern-topic-1";
        String topicName2 = "persistent://my-property/my-ns/pattern-topic-2";
        String topicName3 = "persistent://my-property/my-ns/pattern-topic-3";
        String topicName4 = "persistent://my-property/my-ns/pattern-topic-4";
        String topicName5 = "persistent://my-property/my-ns/pattern-topic-5";
        String topicName6 = "persistent://my-property/my-ns/pattern-topic-6";

        List<String> oldNames = Lists.newArrayList(topicName1, topicName2, topicName3, topicName4);
        List<String> newNames = Lists.newArrayList(topicName3, topicName4, topicName5, topicName6);

        Set<String> addedNames = TopicList.minus(newNames, oldNames);
        Set<String> removedNames = TopicList.minus(oldNames, newNames);

        assertTrue(addedNames.size() == 2 &&
                addedNames.contains(topicName5) &&
                addedNames.contains(topicName6));
        assertTrue(removedNames.size() == 2 &&
                removedNames.contains(topicName1) &&
                removedNames.contains(topicName2));

        // totally 2 different list, should return content of first lists.
        Set<String> addedNames2 = TopicList.minus(addedNames, removedNames);
        assertTrue(addedNames2.size() == 2 &&
                addedNames2.contains(topicName5) &&
                addedNames2.contains(topicName6));

        // 2 same list, should return empty list.
        Set<String> addedNames3 = TopicList.minus(addedNames, addedNames);
        assertEquals(addedNames3.size(), 0);

        // empty list minus: addedNames2.size = 2, addedNames3.size = 0
        Set<String> addedNames4 = TopicList.minus(addedNames2, addedNames3);
        assertEquals(addedNames2.size(), addedNames4.size());
        addedNames4.forEach(name -> assertTrue(addedNames2.contains(name)));

        Set<String> addedNames5 = TopicList.minus(addedNames3, addedNames2);
        assertEquals(addedNames5.size(), 0);
    }