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]

Reply via email to