public class ObjectSortingExample {
public static void main(String[] args) {
Order ord1 = new Order(101, 2000, "Sony");
Order ord2 = new Order(102, 3000, "Hitachi");
Order ord3 = new Order(103, 4000, "Philips");
List<Order> orders = new ArrayList<Order>();
orders.add(ord3);
orders.add(ord1);
orders.add(ord2);
System.out.println("Unsorted Collection : " + orders);
Collections.sort(orders);
System.out.println("Listf Order object sorted in natural order : " + orders);
Collections.sort(orders, new Order.OrderByAmount());
System.out.println("Listf Order object sorted using comparator - by amount : " + orders);
Collections.sort(orders, new Order.OrderByCustomer());
System.out.println("Listf Order object sorted using comparator - by customer : " + orders);
}
}
class Order implements Comparable<Order> {
private int orderId;
private double amount;
private String customer;
public Order(int orderId, double amount, String customer) {
this.orderId = orderId;
this.amount = amount;
this.customer = customer;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public String getCustomer() {
return customer;
}
public void setCustomer(String customer) {
this.customer = customer;
}
public static class OrderByAmount implements Comparator<Order> {
@Override
public int compare(Order o1, Order o2) {
return o1.amount > o2.amount ? 1 : (o1.amount < o2.amount ? -1 : 0);
}
}
public static class OrderByCustomer implements Comparator<Order> {
@Override
public int compare(Order o1, Order o2) {
return o1.customer.compareTo(o2.customer);
}
}
@Override
public int compareTo(Order o) {
return this.orderId > o.orderId ? 1 : (this.orderId < o.orderId ? -1 : 0);
}
@Override
public String toString() {
return String.valueOf(orderId);
}
}