5.12. Using a Case-Insensitive Map

Problem

You need to use a Map with String keys that will ignore the capitalization of a key when retrieving a value.

Solution

Use a CaseInsensitiveMap from the Commons Collections. This implementation of Map takes String keys and provides case-insensitive access. An entry with a key “Test” can be retrieved with the strings “TEST,” “test,” and “tEST.” Here is a small example demonstrating the case insensitivity:

import java.util.*;
import org.apache.commons.collection.map.CaseInsensitiveMap;

Map grades = new CaseInsensitiveMap( );
grades.put( "Fortney", "B-" );
grades.put( "Puckett", "D+" );
grades.put( "Flatt", "A-" );

String grade1 = (String) grades.get( "puckett" );
String grade2 = (String) grades.get( "FLATT" );

In this example, the grades are stored with a capitalized last name, and the results are retrieved with irregularly capitalized last names. This example returns the grades for “Puckett” and “Flatt” even though they were retrieved with “puckett” and “FLATT.”

Discussion

Example 5-12 demonstrates the use of CaseInsensitiveMap to access state names by state abbreviations regardless of capitalization. This is useful when an application is requesting a state from a user in a form to capture an address. If a user enters “il,” “IL,” or “Il,” you need to be able to return “Illinois.”

Example 5-12. Using a CaseInsensitiveMap for U.S. states

package com.discursive.jccook.collections.insensitive; import java.util.Map; import org.apache.commons.collections.map.CaseInsensitiveMap; ...

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.