common java cookbook

333
A Discursive Open Book The Common Java Cookbook Tim O’Brien discursive.com/books/cjcook July 2009 Edition 0.19

Upload: sandy-ronaldo

Post on 30-Nov-2015

70 views

Category:

Documents


9 download

TRANSCRIPT

  • A Discursive Open Book

    June 2009Edition 0.9

    The Common Java Cookbook

    Tim OBrien

    discursive.com/books/cjcook

    July 2009Edition 0.19

  • Copyright and License ....................................................................................................................................xx1. Creative Commons BY-NC-ND 3.0 US License ...................................................................................xx

    Foreword: 0.19 ............................................................................................................................................ xxivPreface ......................................................................................................................................................... xxv

    1. What's Inside .................................................................................................................................... xxv2. Conventions Used in This Book ......................................................................................................xxviii3. What You'll Need ............................................................................................................................ xxix4. Book Examples ................................................................................................................................ xxix5. The Apache Commons Community ................................................................................................... xxix6. The Apache Software License ............................................................................................................ xxx7. We'd Like to Hear from You ............................................................................................................. xxxi

    1. Supplements to the Java 2 Platform ................................................................................................................11.1. Introduction .......................................................................................................................................11.1. Depending on Commons Lang ............................................................................................................1

    1.1.1. Problem ..................................................................................................................................11.1.2. Solution ..................................................................................................................................11.1.3. Discussion ..............................................................................................................................2

    1.4. Automating the Generation of toString( ) Content ................................................................................21.4.1. Problem ..................................................................................................................................21.4.2. Solution ..................................................................................................................................21.4.3. Discussion ..............................................................................................................................2

    1.5. Customizing Generated toString( ) Content ..........................................................................................41.5.1. Problem ..................................................................................................................................41.5.2. Solution ..................................................................................................................................41.5.3. Discussion ..............................................................................................................................5

    1.6. Automating hashCode( ) and equals( ) .................................................................................................61.6.1. Problem ..................................................................................................................................61.6.2. Solution ..................................................................................................................................61.6.3. Discussion ..............................................................................................................................7

    1.7. Automating compareTo( ) ...................................................................................................................81.7.1. Problem ..................................................................................................................................81.7.2. Solution ..................................................................................................................................81.7.3. Discussion ..............................................................................................................................81.7.4. See Also .................................................................................................................................9

    1.8. Printing an Array ..............................................................................................................................101.8.1. Problem ................................................................................................................................101.8.2. Solution ................................................................................................................................101.8.3. Discussion ............................................................................................................................10

    1.9. Cloning and Reversing Arrays ..........................................................................................................101.9.1. Problem ................................................................................................................................101.9.2. Solution ................................................................................................................................111.9.3. Discussion ............................................................................................................................11

    1.10. Transforming Between Object Arrays and Primitive Arrays ..............................................................121.10.1. Problem ..............................................................................................................................121.10.2. Solution ..............................................................................................................................121.10.3. Discussion ..........................................................................................................................131.10.4. See Also .............................................................................................................................14

    1.11. Finding Items in an Array ...............................................................................................................14

    ii

  • 1.11.1. Problem ..............................................................................................................................141.11.2. Solution ..............................................................................................................................141.11.3. Discussion ..........................................................................................................................151.11.4. See Also .............................................................................................................................16

    1.12. Creating a Map from a Multidimensional Array ...............................................................................161.12.1. Problem ..............................................................................................................................161.12.2. Solution ..............................................................................................................................161.12.3. Discussion ..........................................................................................................................161.12.4. See Also .............................................................................................................................16

    1.13. Formatting Dates ............................................................................................................................171.13.1. Problem ..............................................................................................................................171.13.2. Solution ..............................................................................................................................171.13.3. Discussion ..........................................................................................................................171.13.4. See Also .............................................................................................................................18

    1.14. Rounding Date Objects ...................................................................................................................181.14.1. Problem ..............................................................................................................................181.14.2. Solution ..............................................................................................................................191.14.3. Discussion ..........................................................................................................................191.14.4. See Also .............................................................................................................................20

    1.15. Truncating Date Objects .................................................................................................................201.15.1. Problem ..............................................................................................................................201.15.2. Solution ..............................................................................................................................201.15.3. Discussion ..........................................................................................................................211.15.4. See Also .............................................................................................................................21

    1.16. Creating an Enum ...........................................................................................................................211.16.1. Problem ..............................................................................................................................211.16.2. Solution ..............................................................................................................................211.16.3. Discussion ..........................................................................................................................221.16.4. See Also .............................................................................................................................25

    1.18. Validation of Method Parameters ....................................................................................................251.18.1. Problem ..............................................................................................................................251.18.2. Solution ..............................................................................................................................251.18.3. Discussion ..........................................................................................................................251.18.4. See Also .............................................................................................................................27

    1.19. Measuring Time .............................................................................................................................271.19.1. Problem ..............................................................................................................................271.19.2. Solution ..............................................................................................................................271.19.3. Discussion ..........................................................................................................................28

    2. Manipulating Text .......................................................................................................................................302.1. Introduction .....................................................................................................................................302.1. Setting Up StringUtils and WordUtils ................................................................................................30

    2.1.1. Problem ................................................................................................................................302.1.2. Solution ................................................................................................................................302.1.3. Discussion ............................................................................................................................30

    2.2. Checking for an Empty String ...........................................................................................................312.2.1. Problem ................................................................................................................................312.2.2. Solution ................................................................................................................................312.2.3. Discussion ............................................................................................................................31

    2.3. Abbreviating Strings .........................................................................................................................32

    Common Java Cookbook

    iii

  • 2.3.1. Problem ................................................................................................................................322.3.2. Solution ................................................................................................................................322.3.3. Discussion ............................................................................................................................33

    2.4. Splitting a String ..............................................................................................................................342.4.1. Problem ................................................................................................................................342.4.2. Solution ................................................................................................................................342.4.3. Discussion ............................................................................................................................342.4.4. See Also ...............................................................................................................................35

    2.5. Finding Nested Strings .....................................................................................................................352.5.1. Problem ................................................................................................................................352.5.2. Solution ................................................................................................................................352.5.3. Discussion ............................................................................................................................35

    2.6. Stripping and Trimming a String .......................................................................................................362.6.1. Problem ................................................................................................................................362.6.2. Solution ................................................................................................................................362.6.3. Discussion ............................................................................................................................36

    2.7. Chomping a String ...........................................................................................................................372.7.1. Problem ................................................................................................................................372.7.2. Solution ................................................................................................................................37

    2.8. Creating an Emphasized Header ........................................................................................................382.8.1. Problem ................................................................................................................................382.8.2. Solution ................................................................................................................................382.8.3. Discussion ............................................................................................................................38

    2.9. Reversing a String ............................................................................................................................382.9.1. Problem ................................................................................................................................382.9.2. Solution ................................................................................................................................382.9.3. Discussion ............................................................................................................................39

    2.10. Wrapping Words ............................................................................................................................392.10.1. Problem ..............................................................................................................................392.10.2. Solution ..............................................................................................................................402.10.3. Discussion ..........................................................................................................................40

    2.11. Testing the Contents of a String .......................................................................................................412.11.1. Problem ..............................................................................................................................412.11.2. Solution ..............................................................................................................................412.11.3. Discussion ..........................................................................................................................41

    2.12. Measuring the Frequency of a String ...............................................................................................422.12.1. Problem ..............................................................................................................................422.12.2. Solution ..............................................................................................................................432.12.3. Discussion ..........................................................................................................................432.12.4. See Also .............................................................................................................................43

    2.13. Parsing Formatted Strings ...............................................................................................................432.13.1. Problem ..............................................................................................................................432.13.2. Solution ..............................................................................................................................442.13.3. Discussion ..........................................................................................................................44

    2.14. Calculating String Difference ..........................................................................................................452.14.1. Problem ..............................................................................................................................462.14.2. Solution ..............................................................................................................................462.14.3. Discussion ..........................................................................................................................462.14.4. See Also .............................................................................................................................47

    Common Java Cookbook

    iv

  • 2.15. Using Commons Codec ..................................................................................................................472.15.1. Problem ..............................................................................................................................472.15.2. Solution ..............................................................................................................................472.15.3. Discussion ..........................................................................................................................482.15.4. See Also .............................................................................................................................48

    2.17. Calculating Soundex .......................................................................................................................482.17.1. Problem ..............................................................................................................................482.17.2. Solution ..............................................................................................................................482.17.3. Discussion ..........................................................................................................................482.17.4. See Also .............................................................................................................................49

    3. JavaBeans ..................................................................................................................................................503.1. Introduction .....................................................................................................................................503.2. Obtaining Commons BeanUtils .........................................................................................................51

    3.2.1. Problem ................................................................................................................................513.2.2. Solution ................................................................................................................................513.2.3. Discussion ............................................................................................................................513.2.4. See Also ...............................................................................................................................51

    3.4. Accessing Simple Bean Properties .....................................................................................................523.4.1. Problem ................................................................................................................................523.4.2. Solution ................................................................................................................................523.4.3. Discussion ............................................................................................................................523.4.4. See Also ...............................................................................................................................53

    3.5. Accessing Nested Bean Properties .....................................................................................................533.5.1. Problem ................................................................................................................................533.5.2. Solution ................................................................................................................................543.5.3. Discussion ............................................................................................................................54

    3.6. Accessing Indexed Bean Properties ...................................................................................................553.6.1. Problem ................................................................................................................................553.6.2. Solution ................................................................................................................................553.6.3. Discussion ............................................................................................................................55

    3.7. Accessing Mapped Bean Properties ...................................................................................................563.7.1. Problem ................................................................................................................................563.7.2. Solution ................................................................................................................................563.7.3. Discussion ............................................................................................................................56

    3.8. Accessing a Simple, Nested, Indexed, and Mapped Bean Property .......................................................573.8.1. Problem ................................................................................................................................573.8.2. Solution ................................................................................................................................573.8.3. Discussion ............................................................................................................................583.8.4. See Also ...............................................................................................................................58

    3.9. Determining the Type of a Bean Property ..........................................................................................593.9.1. Problem ................................................................................................................................593.9.2. Solution ................................................................................................................................593.9.3. Discussion ............................................................................................................................59

    3.10. Comparing Beans ...........................................................................................................................603.10.1. Problem ..............................................................................................................................603.10.2. Solution ..............................................................................................................................603.10.3. Discussion ..........................................................................................................................603.10.4. See Also .............................................................................................................................62

    3.11. Copying Bean Properties ................................................................................................................62

    Common Java Cookbook

    v

  • 3.11.1. Problem ..............................................................................................................................623.11.2. Solution ..............................................................................................................................623.11.3. Discussion ..........................................................................................................................633.11.4. See Also .............................................................................................................................63

    3.12. Cloning a Bean ...............................................................................................................................633.12.1. Problem ..............................................................................................................................633.12.2. Solution ..............................................................................................................................643.12.3. Discussion ..........................................................................................................................64

    3.13. Setting a Bean Property ..................................................................................................................643.13.1. Problem ..............................................................................................................................643.13.2. Solution ..............................................................................................................................643.13.3. Discussion ..........................................................................................................................65

    3.14. Testing Property Access .................................................................................................................653.14.1. Problem ..............................................................................................................................653.14.2. Solution ..............................................................................................................................653.14.3. Discussion ..........................................................................................................................65

    3.15. Validating Beans with Predicates .....................................................................................................663.15.1. Problem ..............................................................................................................................663.15.2. Solution ..............................................................................................................................663.15.3. Discussion ..........................................................................................................................673.15.4. See Also .............................................................................................................................67

    3.16. Creating a Map of Bean Properties ..................................................................................................673.16.1. Problem ..............................................................................................................................683.16.2. Solution ..............................................................................................................................683.16.3. Discussion ..........................................................................................................................683.16.4. See Also .............................................................................................................................68

    3.17. Wrapping a Bean with a Map ..........................................................................................................683.17.1. Problem ..............................................................................................................................683.17.2. Solution ..............................................................................................................................683.17.3. Discussion ..........................................................................................................................693.17.4. See Also .............................................................................................................................70

    3.18. Creating a Dynamic Bean ...............................................................................................................713.18.1. Problem ..............................................................................................................................713.18.2. Solution ..............................................................................................................................713.18.3. Discussion ..........................................................................................................................713.18.4. See Also .............................................................................................................................72

    3.19. Getting and Setting Properties as Strings ..........................................................................................723.19.1. Problem ..............................................................................................................................723.19.2. Solution ..............................................................................................................................723.19.3. Discussion ..........................................................................................................................733.19.4. See Also .............................................................................................................................73

    4. Functors .....................................................................................................................................................744.1. Introduction .....................................................................................................................................744.1. Obtaining Commons Collections .......................................................................................................74

    4.1.1. Problem ................................................................................................................................744.1.2. Solution ................................................................................................................................744.1.3. Discussion ............................................................................................................................754.1.4. See Also ...............................................................................................................................75

    4.3. Reversing a Comparator ...................................................................................................................75

    Common Java Cookbook

    vi

  • 4.3.1. Problem ................................................................................................................................754.3.2. Solution ................................................................................................................................754.3.3. Discussion ............................................................................................................................764.3.4. See Also ...............................................................................................................................77

    4.4. Chaining Comparators ......................................................................................................................774.4.1. Problem ................................................................................................................................774.4.2. Solution ................................................................................................................................774.4.3. Discussion ............................................................................................................................784.4.4. See Also ...............................................................................................................................79

    4.5. Comparing Nulls ..............................................................................................................................794.5.1. Problem ................................................................................................................................794.5.2. Solution ................................................................................................................................794.5.3. Discussion ............................................................................................................................794.5.4. See Also ...............................................................................................................................80

    4.6. Fixed-Order Comparison ..................................................................................................................804.6.1. Problem ................................................................................................................................804.6.2. Solution ................................................................................................................................804.6.3. Discussion ............................................................................................................................814.6.4. See Also ...............................................................................................................................83

    4.7. Using Simple Predicates ...................................................................................................................834.7.1. Problem ................................................................................................................................834.7.2. Solution ................................................................................................................................834.7.3. Discussion ............................................................................................................................844.7.4. See Also ...............................................................................................................................86

    4.8. Writing a Custom Predicate ..............................................................................................................864.8.1. Problem ................................................................................................................................864.8.2. Solution ................................................................................................................................874.8.3. Discussion ............................................................................................................................874.8.4. See Also ...............................................................................................................................88

    4.9. Creating Composite Predicates ..........................................................................................................884.9.1. Problem ................................................................................................................................884.9.2. Solution ................................................................................................................................884.9.3. Discussion ............................................................................................................................89

    4.10. Transforming Objects .....................................................................................................................914.10.1. Problem ..............................................................................................................................914.10.2. Solution ..............................................................................................................................914.10.3. Discussion ..........................................................................................................................92

    4.11. Creating a Chain of Transformations ...............................................................................................924.11.1. Problem ..............................................................................................................................924.11.2. Solution ..............................................................................................................................924.11.3. Discussion ..........................................................................................................................93

    4.12. Applying Conditional Transformations ............................................................................................934.12.1. Problem ..............................................................................................................................934.12.2. Solution ..............................................................................................................................934.12.3. Discussion ..........................................................................................................................94

    4.13. Writing a Closure ...........................................................................................................................944.13.1. Problem ..............................................................................................................................944.13.2. Solution ..............................................................................................................................954.13.3. Discussion ..........................................................................................................................95

    Common Java Cookbook

    vii

  • 4.14. Chaining Closures ..........................................................................................................................954.14.1. Problem ..............................................................................................................................954.14.2. Solution ..............................................................................................................................954.14.3. Discussion ..........................................................................................................................96

    4.15. Modeling Conditional Statements with Closures ...............................................................................964.15.1. Problem ..............................................................................................................................964.15.2. Solution ..............................................................................................................................964.15.3. Discussion ..........................................................................................................................97

    4.16. Modeling Loops with Closures ........................................................................................................984.16.1. Problem ..............................................................................................................................984.16.2. Solution ..............................................................................................................................984.16.3. Discussion ..........................................................................................................................99

    5. Collections ............................................................................................................................................... 1005.1. Introduction ................................................................................................................................... 1005.1. Obtaining Commons Collections ..................................................................................................... 100

    5.1.1. Problem .............................................................................................................................. 1005.1.2. Solution .............................................................................................................................. 1005.1.3. See Also ............................................................................................................................. 100

    5.2. Using a Looping Iterator ................................................................................................................. 1015.2.1. Problem .............................................................................................................................. 1015.2.2. Solution .............................................................................................................................. 1015.2.3. Discussion .......................................................................................................................... 1015.2.4. See Also ............................................................................................................................. 102

    5.3. Iterating Over an ArrayList ............................................................................................................. 1025.3.1. Problem .............................................................................................................................. 1025.3.2. Solution .............................................................................................................................. 1025.3.3. Discussion .......................................................................................................................... 1035.3.4. See Also ............................................................................................................................. 104

    5.4. Filtering a Collection with a Predicate ............................................................................................. 1045.4.1. Problem .............................................................................................................................. 1045.4.2. Solution .............................................................................................................................. 1045.4.3. Discussion .......................................................................................................................... 1055.4.4. See Also ............................................................................................................................. 106

    5.5. Iterating Through Distinct Elements ................................................................................................ 1065.5.1. Problem .............................................................................................................................. 1065.5.2. Solution .............................................................................................................................. 1075.5.3. Discussion .......................................................................................................................... 1075.5.4. See Also ............................................................................................................................. 107

    5.6. Using a Bag ................................................................................................................................... 1075.6.1. Problem .............................................................................................................................. 1075.6.2. Solution .............................................................................................................................. 1085.6.3. Discussion .......................................................................................................................... 1085.6.4. See Also ............................................................................................................................. 111

    5.7. Using a Buffer ............................................................................................................................... 1115.7.1. Problem .............................................................................................................................. 1115.7.2. Solution .............................................................................................................................. 1115.7.3. Discussion .......................................................................................................................... 1115.7.4. See Also ............................................................................................................................. 112

    5.8. Creating a Priority Queue ............................................................................................................... 113

    Common Java Cookbook

    viii

  • 5.8.1. Problem .............................................................................................................................. 1135.8.2. Solution .............................................................................................................................. 1135.8.3. Discussion .......................................................................................................................... 1135.8.4. See Also ............................................................................................................................. 115

    5.9. Using a Blocking Buffer ................................................................................................................. 1165.9.1. Problem .............................................................................................................................. 1165.9.2. Solution .............................................................................................................................. 1165.9.3. Discussion .......................................................................................................................... 1175.9.4. See Also ............................................................................................................................. 118

    5.10. Storing Multiple Values in a Map .................................................................................................. 1185.10.1. Problem ............................................................................................................................ 1185.10.2. Solution ............................................................................................................................ 1185.10.3. Discussion ........................................................................................................................ 119

    5.11. Retrieving a Key by a Value ......................................................................................................... 1205.11.1. Problem ............................................................................................................................ 1205.11.2. Solution ............................................................................................................................ 1205.11.3. Discussion ........................................................................................................................ 1205.11.4. See Also ........................................................................................................................... 122

    5.12. Using a Case-Insensitive Map ....................................................................................................... 1225.12.1. Problem ............................................................................................................................ 1225.12.2. Solution ............................................................................................................................ 1225.12.3. Discussion ........................................................................................................................ 1235.12.4. See Also ........................................................................................................................... 123

    5.13. Creating Typed Collections and Maps ............................................................................................ 1235.13.1. Problem ............................................................................................................................ 1245.13.2. Solution ............................................................................................................................ 1245.13.3. Discussion ........................................................................................................................ 1245.13.4. See Also ........................................................................................................................... 126

    5.14. Constraining Map Values .............................................................................................................. 1265.14.1. Problem ............................................................................................................................ 1275.14.2. Solution ............................................................................................................................ 1275.14.3. Discussion ........................................................................................................................ 127

    5.15. Constraining List Contents ............................................................................................................ 1295.15.1. Problem ............................................................................................................................ 1295.15.2. Solution ............................................................................................................................ 1295.15.3. Discussion ........................................................................................................................ 1295.15.4. See Also ........................................................................................................................... 130

    5.16. Transforming Collections .............................................................................................................. 1305.16.1. Problem ............................................................................................................................ 1305.16.2. Solution ............................................................................................................................ 1305.16.3. Discussion ........................................................................................................................ 1315.16.4. See Also ........................................................................................................................... 132

    5.17. Creating a Least Recently Used Cache ........................................................................................... 1325.17.1. Problem ............................................................................................................................ 1325.17.2. Solution ............................................................................................................................ 1325.17.3. Discussion ........................................................................................................................ 133

    5.18. Using a Lazy Map ........................................................................................................................ 1335.18.1. Problem ............................................................................................................................ 1335.18.2. Solution ............................................................................................................................ 133

    Common Java Cookbook

    ix

  • 5.18.3. Discussion ........................................................................................................................ 1345.18.4. See Also ........................................................................................................................... 136

    5.19. Counting Objects in a Collection ................................................................................................... 1365.19.1. Problem ............................................................................................................................ 1365.19.2. Solution ............................................................................................................................ 1365.19.3. Discussion ........................................................................................................................ 1375.19.4. See Also ........................................................................................................................... 138

    5.20. Performing Set Operations ............................................................................................................ 1385.20.1. Problem ............................................................................................................................ 1385.20.2. Solution ............................................................................................................................ 1385.20.3. Discussion ........................................................................................................................ 139

    5.21. Retrieving Map Values Without Casting ........................................................................................ 1395.21.1. Problem ............................................................................................................................ 1395.21.2. Solution ............................................................................................................................ 1395.21.3. Discussion ........................................................................................................................ 140

    6. XML ........................................................................................................................................................ 1426.1. Introduction ................................................................................................................................... 1426.1. Obtaining Commons Digester ......................................................................................................... 143

    6.1.1. Problem .............................................................................................................................. 1436.1.2. Solution .............................................................................................................................. 1436.1.3. Discussion .......................................................................................................................... 1436.1.4. See Also ............................................................................................................................. 143

    6.2. Turning XML Documents into Objects ............................................................................................ 1436.2.1. Problem .............................................................................................................................. 1436.2.2. Solution .............................................................................................................................. 1436.2.3. Discussion .......................................................................................................................... 1456.2.4. See Also ............................................................................................................................. 146

    6.3. Namespace-Aware Parsing ............................................................................................................. 1476.3.1. Problem .............................................................................................................................. 1476.3.2. Solution .............................................................................................................................. 1476.3.3. Discussion .......................................................................................................................... 1486.3.4. See Also ............................................................................................................................. 149

    6.4. Creating a Simple XML Command Language .................................................................................. 1496.4.1. Problem .............................................................................................................................. 1506.4.2. Solution .............................................................................................................................. 1506.4.3. Discussion .......................................................................................................................... 1526.4.4. See Also ............................................................................................................................. 152

    6.5. Variable Substitution and XML Parsing ........................................................................................... 1526.5.1. Problem .............................................................................................................................. 1526.5.2. Solution .............................................................................................................................. 1526.5.3. Discussion .......................................................................................................................... 1546.5.4. See Also ............................................................................................................................. 154

    6.6. Obtaining Commons Betwixt .......................................................................................................... 1546.6.1. Problem .............................................................................................................................. 1546.6.2. Solution .............................................................................................................................. 1546.6.3. Discussion .......................................................................................................................... 1556.6.4. See Also ............................................................................................................................. 155

    6.7. Turning Beans into XML Documents .............................................................................................. 1556.7.1. Problem .............................................................................................................................. 155

    Common Java Cookbook

    x

  • 6.7.2. Solution .............................................................................................................................. 1556.7.3. Discussion .......................................................................................................................... 1566.7.4. See Also ............................................................................................................................. 157

    6.8. Customizing XML Generated from an Object .................................................................................. 1576.8.1. Problem .............................................................................................................................. 1576.8.2. Solution .............................................................................................................................. 1576.8.3. Discussion .......................................................................................................................... 1586.8.4. See Also ............................................................................................................................. 159

    6.9. Turning XML Documents into Beans .............................................................................................. 1606.9.1. Problem .............................................................................................................................. 1606.9.2. Solution .............................................................................................................................. 1606.9.3. Discussion .......................................................................................................................... 1606.9.4. See Also ............................................................................................................................. 161

    7. Application Infrastructure .......................................................................................................................... 1627.1. Introduction ................................................................................................................................... 1621.1. Depending on Commons CLI .......................................................................................................... 162

    1.1.1. Problem .............................................................................................................................. 1621.1.2. Solution .............................................................................................................................. 1621.1.3. Discussion .......................................................................................................................... 1621.1.4. See Also ............................................................................................................................. 162

    7.2. Parsing a Simple Command Line .................................................................................................... 1627.2.1. Problem .............................................................................................................................. 1627.2.2. Solution .............................................................................................................................. 1637.2.3. Discussion .......................................................................................................................... 1637.2.4. See Also ............................................................................................................................. 164

    7.3. Parsing a Complex Command Line ................................................................................................. 1647.3.1. Problem .............................................................................................................................. 1647.3.2. Solution .............................................................................................................................. 1647.3.3. Discussion .......................................................................................................................... 1657.3.4. See Also ............................................................................................................................. 165

    7.4. Printing Usage Information ............................................................................................................. 1657.4.1. Problem .............................................................................................................................. 1657.4.2. Solution .............................................................................................................................. 1657.4.3. Discussion .......................................................................................................................... 166

    1.1. Depending on Commons Configuration ........................................................................................... 1671.1.1. Problem .............................................................................................................................. 1671.1.2. Solution .............................................................................................................................. 1671.1.3. Discussion .......................................................................................................................... 1671.1.4. See Also ............................................................................................................................. 167

    7.6. Configuring Applications with Properties Files ................................................................................ 1677.6.1. Problem .............................................................................................................................. 1677.6.2. Solution .............................................................................................................................. 1687.6.3. Discussion .......................................................................................................................... 1687.6.4. See Also ............................................................................................................................. 168

    7.7. Configuring Applications with XML ............................................................................................... 1687.7.1. Problem .............................................................................................................................. 1687.7.2. Solution .............................................................................................................................. 1687.7.3. Discussion .......................................................................................................................... 1697.7.4. See Also ............................................................................................................................. 169

    Common Java Cookbook

    xi

  • 7.8. Using Composite Configuration ...................................................................................................... 1707.8.1. Problem .............................................................................................................................. 1707.8.2. Solution .............................................................................................................................. 1707.8.3. Discussion .......................................................................................................................... 1727.8.4. See Also ............................................................................................................................. 172

    7.9. Depending on Commons Logging ................................................................................................... 1727.9.1. Problem .............................................................................................................................. 1727.9.2. Solution .............................................................................................................................. 1727.9.3. Discussion .......................................................................................................................... 1737.9.4. See Also ............................................................................................................................. 173

    7.10. Using an Abstract Logging Interface .............................................................................................. 1737.10.1. Problem ............................................................................................................................ 1737.10.2. Solution ............................................................................................................................ 1737.10.3. Discussion ........................................................................................................................ 1747.10.4. See Also ........................................................................................................................... 174

    7.11. Specifying a Logging Implementation ........................................................................................... 1747.11.1. Problem ............................................................................................................................ 1747.11.2. Solution ............................................................................................................................ 1747.11.3. Discussion ........................................................................................................................ 1747.11.4. See Also ........................................................................................................................... 175

    7.12. Depending on Apache Log4J ........................................................................................................ 1757.12.1. Problem ............................................................................................................................ 1757.12.2. Solution ............................................................................................................................ 1757.12.3. Discussion ........................................................................................................................ 1767.12.4. See Also ........................................................................................................................... 176

    7.13. Configuring Log4J with a Properties File ....................................................................................... 1767.13.1. Problem ............................................................................................................................ 1767.13.2. Solution ............................................................................................................................ 1767.13.3. Discussion ........................................................................................................................ 1777.13.4. See Also ........................................................................................................................... 177

    7.14. Configuring Log4J with XML ....................................................................................................... 1777.14.1. Problem ............................................................................................................................ 1777.14.2. Solution ............................................................................................................................ 1777.14.3. See Also ........................................................................................................................... 178

    8. Math ........................................................................................................................................................ 1798.1. Introduction ................................................................................................................................... 1798.1. Using Fractions .............................................................................................................................. 179

    8.1.1. Problem .............................................................................................................................. 1798.1.2. Solution .............................................................................................................................. 1798.1.3. Discussion .......................................................................................................................... 1798.1.4. See Also ............................................................................................................................. 181

    8.2. Finding the Maximum and Minimum in an Array ............................................................................. 1818.2.1. Problem .............................................................................................................................. 1818.2.2. Solution .............................................................................................................................. 1818.2.3. Discussion .......................................................................................................................... 181

    8.3. Using Number Ranges .................................................................................................................... 1828.3.1. Problem .............................................................................................................................. 1828.3.2. Solution .............................................................................................................................. 1828.3.3. Discussion .......................................................................................................................... 182

    Common Java Cookbook

    xii

  • 8.3.4. See Also ............................................................................................................................. 1838.4. Generating Random Variables ......................................................................................................... 183

    8.4.1. Problem .............................................................................................................................. 1838.4.2. Solution .............................................................................................................................. 1838.4.3. Discussion .......................................................................................................................... 184

    8.5. Obtaining Commons Math .............................................................................................................. 1848.5.1. Problem .............................................................................................................................. 1848.5.2. Solution .............................................................................................................................. 1848.5.3. Discussion .......................................................................................................................... 1858.5.4. See Also ............................................................................................................................. 185

    8.6. Calculating Simple Univariate Statistics .......................................................................................... 1858.6.1. Problem .............................................................................................................................. 1858.6.2. Solution .............................................................................................................................. 1858.6.3. Discussion .......................................................................................................................... 1868.6.4. See Also ............................................................................................................................. 187

    8.7. Solving a System of Linear Equations ............................................................................................. 1878.7.1. Problem .............................................................................................................................. 1878.7.2. Solution .............................................................................................................................. 1878.7.3. Discussion .......................................................................................................................... 1878.7.4. See Also ............................................................................................................................. 188

    8.8. Arithmetic with Complex Numbers ................................................................................................. 1888.8.1. Problem .............................................................................................................................. 1888.8.2. Solution .............................................................................................................................. 1888.8.3. Discussion .......................................................................................................................... 1898.8.4. See also .............................................................................................................................. 189

    8.9. Establishing Relationships Between Variables ................................................................................. 1898.9.1. Problem .............................................................................................................................. 1898.9.2. Solution .............................................................................................................................. 1908.9.3. Discussion .......................................................................................................................... 1908.9.4. See Also ............................................................................................................................. 191

    8.10. Estimating the Amount of Time Left in a Process ........................................................................... 1918.10.1. Problem ............................................................................................................................ 1918.10.2. Solution ............................................................................................................................ 1918.10.3. Discussion ........................................................................................................................ 1948.10.4. See Also ........................................................................................................................... 194

    9. Templating ............................................................................................................................................... 1959.1. Introduction ................................................................................................................................... 195

    9.1.1. Common Templating Problems in Applications ..................................................................... 1959.1.2. Templating in Web Applications .......................................................................................... 196

    9.1. Obtaining Commons JEXL ............................................................................................................. 1979.1.1. Problem .............................................................................................................................. 1979.1.2. Solution .............................................................................................................................. 1979.1.3. Discussion .......................................................................................................................... 1989.1.4. See Also ............................................................................................................................. 198

    9.2. Using an Expression Language ....................................................................................................... 1989.2.1. Problem .............................................................................................................................. 1989.2.2. Solution .............................................................................................................................. 1989.2.3. Discussion .......................................................................................................................... 1999.2.4. See Also ............................................................................................................................. 200

    Common Java Cookbook

    xiii

  • 9.3. Invoking Methods in an Expression ................................................................................................. 2009.3.1. Problem .............................................................................................................................. 2009.3.2. Solution .............................................................................................................................. 2009.3.3. Discussion .......................................................................................................................... 2019.3.4. See Also ............................................................................................................................. 201

    9.4. Externalizing Logic with an Expression Language ............................................................................ 2029.4.1. Problem .............................................................................................................................. 2029.4.2. Solution .............................................................................................................................. 2029.4.3. Discussion .......................................................................................................................... 2039.4.4. See Also ............................................................................................................................. 203

    9.5. Obtaining Velocity ......................................................................................................................... 2039.5.1. Problem .............................................................................................................................. 2039.5.2. Solution .............................................................................................................................. 2039.5.3. See Also ............................................................................................................................. 204

    9.6. Using a Simple Templating Language ............................................................................................. 2049.6.1. Problem .............................................................................................................................. 2049.6.2. Solution .............................................................................................................................. 2049.6.3. Discussion .......................................................................................................................... 2059.6.4. See Also ............................................................................................................................. 205

    9.7. Writing Templates with Conditionals and Loops .............................................................................. 2069.7.1. Problem .............................................................................................................................. 2069.7.2. Solution .............................................................................................................................. 2069.7.3. Discussion .......................................................................................................................... 2079.7.4. See Also ............................................................................................................................. 208

    9.8. Using Macros in a Templating Engine ........................