Using lightweight object comparison
- Using the Apache commons lang can be slow for large scale object comparisons (like sorts) so a faster method is to use something like what is shown below
Note: All code below should go in the object or object implementation
- Create an equals function
public boolean equals(Object obj) { if (null == obj) return false; if (!(obj instanceof org.sakaiproject.tool.mytool.MyObject)) return false; else { org.sakaiproject.tool.mytool.MyObject castObj = (org.sakaiproject.tool.mytool.MyObject) obj; if (null == this.getId() || null == castObj.getId()) return false; else return (this.getId().equals(castObj.getId())); } }
- Create a hashCode function
public int hashCode() { if (null == this.getId()) return Integer.MIN_VALUE; String hashStr = this.getClass().getName() + ":" + this.getId().hashCode(); return hashStr.hashCode(); }
- Create a compareTo function
public int compareTo(Object obj) { if (obj.hashCode() > hashCode()) return 1; else if (obj.hashCode() < hashCode()) return -1; else return 0; }
- Create a toString function
public String toString() { return super.toString(); }
- Your object should now be comparable to objects of the same type that have the same data
- Safer comparisons should be done using the commons-lang package - Using commons lang for object comparison
- A sample of an object which demostrates use of the lightweight comparisons: TaskImpl.java
- A sample of implemented functions using the lightweight method:
public boolean equals(Object obj) { if (null == obj) return false; if (!(obj instanceof Task)) return false; else { Task castObj = (Task) obj; if (null == this.getId() || null == castObj.getId()) return false; else return (this.getId().equals(castObj.getId())); } } public int hashCode() { if (null == this.getId()) return super.hashCode(); String hashStr = this.getClass().getName() + ":" + this.getId().hashCode(); return hashStr.hashCode(); } public int compareTo(Object obj) { if (obj.hashCode() > hashCode()) return 1; else if (obj.hashCode() < hashCode()) return -1; else return 0; } public String toString() { return super.toString(); }