commons-collections-2.1.1-src
I am a newbie commons_collections user, trying to learn the TreeBag Java
class. I am getting the following exception, and I assume I don't
understand something important. I have attached the code.
Maybe the underlying TreeMap doesn't get the Comparator set unless
you use the TreeBag ( Comparator c ) constructor?
If you use the TreeBag ( Collections c ) or TreeBag () constructor,
maybe the Comparator in the underlying TreeMap is still null?
Or when you use TreeBag ( Collection c ) constructor, it looks for
the Comparator implementation on the Collection class (i.e. ArrayList?).
Would I have to extend the ArrayList Java class and implement the
Comparator interface for the TreeBag ( Collection c ) interface to
work?
Exception in thread "main" java.lang.ClassCastException
at java.util.TreeMap.compare(TreeMap.java:1085)
at java.util.TreeMap.getEntry(TreeMap.java:345)
at java.util.TreeMap.get(TreeMap.java:264)
at org.apache.commons.collections.MapUtils.getNumber(Unknown
Source)
at org.apache.commons.collections.MapUtils.getInteger(Unknown
Source)
at org.apache.commons.collections.DefaultMapBag.getCount(Unknown
Source)
at org.apache.commons.collections.DefaultMapBag.add(Unknown
Source)
at org.apache.commons.collections.DefaultMapBag.add(Unknown
Source)
at org.apache.commons.collections.DefaultMapBag.addAll(Unknown
Source)
at TreeBagTest.main(TreeBagTest.java:23)
Line 15: ArrayList userList = PhoenixUser.getTestData () ;
// Returns an ArrayList of PhoenixUser objects
// PhoenixUser implements Comparator interface,
// public int hashCode ()
// public boolean equals ( Object object ),
// public int compare ( Object object1, Object object2 )
Line 22: phoenixUserTreeBag = new TreeBag () ;
Line 23: phoenixUserTreeBag.addAll ( userList ) ;
The following code works:
Line 15: TreeBag phoenixUserTreeBag = new TreeBag ( new PhoenixUser (
"", "" ) ) ;
Line 16: phoenixUserTreeBag.addAll ( userList ) ;
Line 17: System.out.println ( "hashBag: " + phoenixUserTreeBag.toString
() ) ;
Line 19: Set phoenixUserSet = phoenixUserTreeBag.uniqueSet () ;
Line 20System.out.println ( "phoenixUserSet: " + phoenixUserSet.toString
() ) ;
Lines 15-19 gives the following output:
hashBag: [1:{ phoenix_user user_id="u1" user_name="user1" },1:{
phoenix_user user_id="u2" user_name="user2" },1:{ phoenix_user
user_id="u3" user_name="user3" },1:{ phoenix_user user_id="u4"
user_name="user4" }]
phoenixUserSet: [{ phoenix_user user_id="u1" user_name="user1" }, {
phoenix_user user_id="u2" user_name="user2" }, { phoenix_user
user_id="u3" user_name="user3" }, { phoenix_user user_id="u4"
user_name="user4" }]
David Stevenson
import java.util.ArrayList ;
import java.util.Comparator ;
public class PhoenixUser implements Comparator
{
private String user_id = null ;
private String user_name = null ;
public PhoenixUser ( String user_id, String user_name )
{
this.user_id = user_id ;
this.user_name = user_name ;
}
public String getUserId () { return this.user_id ; }
public void setUserId ( String new_user_id ) { this.user_id = new_user_id ; }
public String getUserName () { return this.user_name ; }
public void setUserName ( String new_user_name ) { this.user_name = new_user_name ; }
public int hashCode () { return this.user_id.hashCode () ; }
// Required to implement Comparator
public boolean equals ( Object object )
{
PhoenixUser phoenixUser = (PhoenixUser) object ;
boolean equal = this.user_name.equals ( phoenixUser.user_name ) &&
this.user_id.equals ( phoenixUser.user_id ) ;
// System.out.println ( "equal: " + equal + " this: " + this.user_name + "\t" + this.user_id + " that: " + phoenixUser.user_name + "\t" + phoenixUser.user_id ) ;
return equal ;
}
public int compare ( Object object1, Object object2 )
{
PhoenixUser user1 = (PhoenixUser) object1 ;
PhoenixUser user2 = (PhoenixUser) object2 ;
return user1.user_name.compareTo ( user2.user_name ) ;
}
public String toString ()
{
StringBuffer sb = new StringBuffer ( 200 ) ;
sb.append ( "{ phoenix_user " ) ;
sb.append ( "user_id=\"" ).append ( user_id ).append ( "\" " ) ;
sb.append ( "user_name=\"" ).append ( user_name ).append ( "\" }" ) ;
return sb.toString () ;
}
public static ArrayList getTestData ( )
{
ArrayList userList = new ArrayList () ;
userList.add ( new PhoenixUser ( "u1", "user1" ) ) ;
userList.add ( new PhoenixUser ( "u2", "user2" ) ) ;
userList.add ( new PhoenixUser ( "u3", "user3" ) ) ;
userList.add ( new PhoenixUser ( "u4", "user4" ) ) ;
return userList ;
}
}
import org.apache.commons.collections.TreeBag ;
import java.util.ArrayList ;
import java.util.Collection ;
import java.util.Iterator ;
import java.util.Set ;
public class TreeBagTest
{
public static void main ( String [] args )
{
ArrayList userList = PhoenixUser.getTestData () ;
TreeBag phoenixUserTreeBag = new TreeBag ( new PhoenixUser ( "", "" ) ) ;
phoenixUserTreeBag.addAll ( userList ) ;
System.out.println ( "hashBag: " + phoenixUserTreeBag.toString () ) ;
Set phoenixUserSet = phoenixUserTreeBag.uniqueSet () ;
System.out.println ( "phoenixUserSet: " + phoenixUserSet.toString () ) ;
phoenixUserTreeBag = new TreeBag () ;
phoenixUserTreeBag.addAll ( userList ) ;
System.out.println ( "hashBag: " + phoenixUserTreeBag.toString () ) ;
for ( Iterator iterator = phoenixUserTreeBag.uniqueSet().iterator () ; iterator.hasNext () ; )
{
PhoenixUser phoenixUser = (PhoenixUser) iterator.next () ;
System.out.println ( "Count: " + phoenixUserTreeBag.getCount ( phoenixUser ) +
"\t" + phoenixUser.getUserName () + "\t" + phoenixUser.getUserId () ) ;
}
PhoenixUser firstUser = (PhoenixUser) phoenixUserTreeBag.first () ;
PhoenixUser lastUser = (PhoenixUser) phoenixUserTreeBag.last () ;
System.out.println ( "First User Count: " + phoenixUserTreeBag.getCount ( firstUser ) +
"\t" + firstUser.getUserName () + "\t" + firstUser.getUserId () ) ;
System.out.println ( "Last User Count: " + phoenixUserTreeBag.getCount ( lastUser ) +
"\t" + lastUser.getUserName () + "\t" + lastUser.getUserId () ) ;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]