@Override public int compare(TopicPartition o1, TopicPartition o2) { TopicWorkload workload1 = infoRetriever.topicWorkload(o1.getTopic()); TopicWorkload workload2 = infoRetriever.topicWorkload(o2.getTopic()); if (workload1 == workload2) { return 0; } int cmp = workload1.compareTo(workload2); if (cmp != 0) { return cmp; } // if workload is the same, compare them based on the name and partition cmp = o1.getTopic().compareTo(o2.getTopic()); if (cmp != 0) { return cmp; } return Integer.compare(o1.getPartition(), o2.getPartition()); } };