5.6. Using a Bag

Problem

You need to find out how many times an object occurs within a Collection, and you need a Collection that lets you manipulate the cardinality of objects it contains.

Solution

Use a Bag. A Bag can store the same object multiple times while keeping track of how many copies it contains. For example, a Bag object can contain 20 copies of object “A” and 50 copies of object “B,” and it can be queried to see how many copies of an object it contains. You can also add or remove multiple copies of an object—add 10 copies of “A” or remove 4 copies of “B.” The following example creates a Bag and adds multiple copies of two String objects:

import org.apache.commons.collections.Bag;
import org.apache.commons.collections.bag.HashBag;

Bag bag = new HashBag( );

bag.add( "TEST1", 100 );
bag.add( "TEST2", 500 );

int test1Count = bag.getCount( "TEST1" );
int test2Count = bag.getCount( "TEST2" );

System.out.println( "Counts: TEST1: " + test1Count + ", TEST2: " + test2Count );

bag.remove( "TEST1", 1 );
bag.remove( "TEST2", 10 );

int test1Count = bag.getCount( "TEST1" );
int test2Count = bag.getCount( "TEST2" );

System.out.println( "Counts: TEST1: " + test1Count + ", TEST2: " + test2Count );

This example put 100 copies of the String “TEST1” and 500 copies of the String “TEST2” into a HashBag. The contents of the Bag are then printed, and 1 instance of “TEST1” and 10 instances of “TEST2” are removed from the Bag:

Counts: TEST1: 100, TEST2: 500
Counts: TEST1: 99, TEST2: 490

Discussion ...

Get Jakarta Commons Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.