5.15. Constraining List Contents

Problem

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

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.

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.

See Also

PredicatedList and PredicatedMap are not the only Collection decorators available in the Jakarta 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 Jakarta Commons Collections project page at http://jakarta.apache.org/commons/collections.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.149.236.27