| 
 
 
 
 import java.util.Comparator;
 import java.util.PriorityQueue;
 
 enum ProductQuality {
 High, Medium, Low
 }
 
 class Product implements Comparable<Product> {
 String name;
 
 ProductQuality priority;
 
 Product(String str, ProductQuality pri) {
 name = str;
 priority = pri;
 }
 
 public int compareTo(Product msg2) {
 return priority.compareTo(msg2.priority);
 }
 }
 
 class MessageComparator implements Comparator<Product> {
 public int compare(Product msg1, Product msg2) {
 return msg2.priority.compareTo(msg1.priority);
 }
 }
 
 public class Main {
 public static void main(String args[]) {
 
 PriorityQueue<Product> pq = new PriorityQueue<Product>(3);
 
 pq.add(new Product("A", ProductQuality.Low));
 pq.add(new Product("B", ProductQuality.High));
 pq.add(new Product("C", ProductQuality.Medium));
 Product m;
 while ((m = pq.poll()) != null)
 System.out.println(m.name + " Priority: " + m.priority);
 
 PriorityQueue<Product> pqRev = new PriorityQueue<Product>(3, new MessageComparator());
 
 pqRev.add(new Product("D", ProductQuality.Low));
 pqRev.add(new Product("E", ProductQuality.High));
 pqRev.add(new Product("F", ProductQuality.Medium));
 
 while ((m = pqRev.poll()) != null)
 System.out.println(m.name + " Priority: " + m.priority);
 }
 }
 
 
 
 |