private Set<String> getMatchingSubscriptions(String partition, String topic) { Set<String> topicFilterKeys = new HashSet<>(); ListIterator<String> pathIterator = Arrays.asList(topic.split(Constant.PATH_SEPARATOR)).listIterator(); List<String> growingTitles = new ArrayList<>(); while (pathIterator.hasNext()) { String name = pathIterator.next(); List<String> slWildCardList = new ArrayList<>(growingTitles); if (pathIterator.hasNext()) { // We deal with wildcard. slWildCardList.add(Constant.SINGLE_LEVEL_WILDCARD); topicFilterKeys.add(quickCheckIdKey(partition, slWildCardList)); } else { // we deal with full topic slWildCardList.add(name); } List<String> reverseSlWildCardList = new ArrayList<>(slWildCardList); growingTitles.add(name); int sizeOfTopic = slWildCardList.size(); if (sizeOfTopic > 1) { sizeOfTopic -= 1; for (int i = 0; i < sizeOfTopic; i++) { if (i >= 0) { slWildCardList.set(i, Constant.MULTI_LEVEL_WILDCARD); reverseSlWildCardList.set(sizeOfTopic - i, Constant.MULTI_LEVEL_WILDCARD); topicFilterKeys.add(quickCheckIdKey(partition, slWildCardList)); topicFilterKeys.add(quickCheckIdKey(partition, reverseSlWildCardList)); } } } } topicFilterKeys.add(quickCheckIdKey(partition, growingTitles)); return topicFilterKeys; }