TypeValue implements Comparable<TypeValue>, Serializable { @Override public int compareTo(final TypeValue typeValue) { if (null == typeValue) { return 1; } int i = stringComparator.compare(type, typeValue.getType()); if (i != 0) { return i; } return stringComparator.compare(value, typeValue.getValue()); } TypeValue();  TypeValue(final String type, final String value); String getType(); void setType(final String type); String getValue(); void setValue(final String value); @Override boolean equals(final Object obj); @Override int hashCode(); @Override String toString(); @Override int compareTo(final TypeValue typeValue);  }
@Test public void testComparisonsAreAsExpected() { TypeValue typeValue = new TypeValue("a", "b"); assertEquals(0, typeValue.compareTo(new TypeValue("a", "b"))); assertTrue(typeValue.compareTo(null) > 0); assertTrue(typeValue.compareTo(new TypeValue()) > 0); assertTrue(typeValue.compareTo(new TypeValue("1", "b")) > 0); assertTrue(typeValue.compareTo(new TypeValue("a", "a")) > 0); assertTrue(typeValue.compareTo(new TypeValue("b", "a")) < 0); assertTrue(typeValue.compareTo(new TypeValue("a", "c")) < 0); }