Upload
sandy-ronaldo
View
70
Download
9
Embed Size (px)
Citation preview
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 ........................