Common Java Cookbook

Edition: 0.19

Download PDF or Read on Scribd

Download Examples (ZIP)

5.15. Constraining List Contents

5.15.1. Problem

You need to constrain objects that can be added to a List.

5.15.2. Solution

Decorate a List using PredicatedList . The following example demonstrates the use of PredicatedList to create a List that only accepts even Integer objects:

import java.util.*;
import org.apache.commons.collections.list.PredicatedList;
import org.apache.commons.collections.Predicate;
import org.apache.commons.lang.ArrayUtils;
// Create a Predicate that only accepts even Integer objects
Predicate onlyEven = new Predicate( ) {
    public boolean evaluate(Object object) {
        Integer integer = (Integer) object;
        return( integer.intValue( ) % 2 == 0 );
    }
}
List list = PredicatedList.decorate( new ArrayList( ), onlyEven );
list.add( new Integer(1) ); // Will throw IllegalArgumentException
list.add( new Integer(2) );
list.add( new Integer(3) ); // Will throw IllegalArgumentException
list.add( new Integer(4) );

In this example, attempting to add an Integer with an odd value causes an IllegalArgumentException, but adding an even number does not cause an exception to be thrown.

5.15.3. Discussion

A PredicatedList is very similar to a PredicatedMap; this decorator works with an existing List and adds inbound validation to a List. There is no limit to the complexity of the Predicate that can be used to provide inbound validation to a List.

5.15.4. See Also

PredicatedList and PredicatedMap are not the only Collection decorators available in the Commons Collections. Any Collection interface in the following list can be decorated with a Predicate.

  • PredicatedBag decorates a Bag.

  • PredicatedBuffer decorates a Buffer.

  • PredicatedCollection decorates a Collection.

  • PredicatedList decorates a List.

  • PredicatedMap decorates a Map.

  • PredicatedSet decorates a Set.

  • PredicatedSortedBag decorates a SortedBag.

  • PredicatedSortedMap decorates a SortedMap.

  • PredicatedSortedSet decorates a SortedSet

For more information about these utilities, see the Commons Collections project page at http://commons.apache.org/collections.


Creative Commons License
Common Java Cookbook by Tim O'Brien is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License.
Permissions beyond the scope of this license may be available at http://www.discursive.com/books/cjcook/reference/jakartackbk-PREFACE-1.html. Copyright 2009. Common Java Cookbook Chunked HTML Output. Some Rights Reserved.