Java Collection How to - Implement generic Comparable for TreeSet for sorting








Question

We would like to know how to implement generic Comparable for TreeSet for sorting.

Answer

import java.util.Set;
import java.util.TreeSet;
//  w w  w.j ava 2s  .  c o m
public class Main {
  public static void main(String[] args) {
    Set<Item> s = new TreeSet<Item>();
    s.add(new Item("item1", 5));
    s.add(new Item("item2", 1));
    s.add(new Item("item3", 7));
    s.add(new Item("item4", 1));

    for (Item it : s) {
      System.out.println("Item is:" + it.getName() + " with value:"
          + it.getValue());
    }

  }
}

class Item implements Comparable<Item> {
  private Integer value;
  private String name;

  Item(String name, int val) {
    this.name = name;
    this.value = val;
  }


  public Integer getValue() {
    return value;
  }


  public void setValue(Integer value) {
    this.value = value;
  }


  public String getName() {
    return name;
  }


  public void setName(String name) {
    this.name = name;
  }


  public boolean equals(Item obj) {
    if (obj == null)
      return false;
    if (obj == this)
      return true;
    if (obj.getClass() != getClass())
      return false;

    Item i = (Item) obj;
    if (i.getValue().equals(getValue()) && i.getName().equals(getName()))
      return true;
    return false;

  }

  public int compareTo(Item o) {
    return getValue().compareTo(o.getValue());
  }

  public boolean equals(Object o) {
    return false;
  }
}

The code above generates the following result.