4343 */
4444public class LocaleCountryConverter {
4545
46- private static final int TOTAL_COUNTRIES = 249 ;
47- private static final List <String > alpha2codes =
48- List .of ("AF" , "AL" , "DZ" , "AS" , "AD" , "AO" , "AI" , "AQ" , "AG" , "AR" , "AM" , "AW" , "AU" , "AT" ,
49- "AZ" , "BS" , "BH" , "BD" , "BB" , "BY" , "BE" , "BZ" , "BJ" , "BM" , "BT" , "BO" , "BQ" , "BA" , "BW" ,
50- "BV" , "BR" , "IO" , "BN" , "BG" , "BF" , "BI" , "CV" , "KH" , "CM" , "CA" , "KY" , "CF" , "TD" , "CL" ,
51- "CN" , "CX" , "CC" , "CO" , "KM" , "CD" , "CG" , "CK" , "CR" , "HR" , "CU" , "CW" , "CY" , "CZ" , "CI" ,
52- "DK" , "DJ" , "DM" , "DO" , "EC" , "EG" , "SV" , "GQ" , "ER" , "EE" , "SZ" , "ET" , "FK" , "FO" , "FJ" ,
53- "FI" , "FR" , "GF" , "PF" , "TF" , "GA" , "GM" , "GE" , "DE" , "GH" , "GI" , "GR" , "GL" , "GD" , "GP" ,
54- "GU" , "GT" , "GG" , "GN" , "GW" , "GY" , "HT" , "HM" , "VA" , "HN" , "HK" , "HU" , "IS" , "IN" , "ID" ,
55- "IR" , "IQ" , "IE" , "IM" , "IL" , "IT" , "JM" , "JP" , "JE" , "JO" , "KZ" , "KE" , "KI" , "KP" , "KR" ,
56- "KW" , "KG" , "LA" , "LV" , "LB" , "LS" , "LR" , "LY" , "LI" , "LT" , "LU" , "MO" , "MG" , "MW" , "MY" ,
57- "MV" , "ML" , "MT" , "MH" , "MQ" , "MR" , "MU" , "YT" , "MX" , "FM" , "MD" , "MC" , "MN" , "ME" , "MS" ,
58- "MA" , "MZ" , "MM" , "NA" , "NR" , "NP" , "NL" , "NC" , "NZ" , "NI" , "NE" , "NG" , "NU" , "NF" , "MK" ,
59- "MP" , "NO" , "OM" , "PK" , "PW" , "PS" , "PA" , "PG" , "PY" , "PE" , "PH" , "PN" , "PL" , "PT" , "PR" ,
60- "QA" , "RO" , "RU" , "RW" , "RE" , "BL" , "SH" , "KN" , "LC" , "MF" , "PM" , "VC" , "WS" , "SM" , "ST" ,
61- "SA" , "SN" , "RS" , "SC" , "SL" , "SG" , "SX" , "SK" , "SI" , "SB" , "SO" , "ZA" , "GS" , "SS" , "ES" ,
62- "LK" , "SD" , "SR" , "SJ" , "SE" , "CH" , "SY" , "TW" , "TJ" , "TZ" , "TH" , "TL" , "TG" , "TK" , "TO" ,
63- "TT" , "TN" , "TM" , "TC" , "TV" , "TR" , "UG" , "UA" , "AE" , "GB" , "UM" , "US" , "UY" , "UZ" , "VU" ,
64- "VE" , "VN" , "VG" , "VI" , "WF" , "EH" , "YE" , "ZM" , "ZW" , "AX" );
65- private static final List <String > alpha3codes = List .of ("AFG" , "ALB" , "DZA" , "ASM" , "AND" , "AGO" ,
66- "AIA" , "ATA" , "ATG" , "ARG" , "ARM" , "ABW" , "AUS" , "AUT" , "AZE" , "BHS" , "BHR" , "BGD" , "BRB" ,
67- "BLR" , "BEL" , "BLZ" , "BEN" , "BMU" , "BTN" , "BOL" , "BES" , "BIH" , "BWA" , "BVT" , "BRA" , "IOT" ,
68- "BRN" , "BGR" , "BFA" , "BDI" , "CPV" , "KHM" , "CMR" , "CAN" , "CYM" , "CAF" , "TCD" , "CHL" , "CHN" ,
69- "CXR" , "CCK" , "COL" , "COM" , "COD" , "COG" , "COK" , "CRI" , "HRV" , "CUB" , "CUW" , "CYP" , "CZE" ,
70- "CIV" , "DNK" , "DJI" , "DMA" , "DOM" , "ECU" , "EGY" , "SLV" , "GNQ" , "ERI" , "EST" , "SWZ" , "ETH" ,
71- "FLK" , "FRO" , "FJI" , "FIN" , "FRA" , "GUF" , "PYF" , "ATF" , "GAB" , "GMB" , "GEO" , "DEU" , "GHA" ,
72- "GIB" , "GRC" , "GRL" , "GRD" , "GLP" , "GUM" , "GTM" , "GGY" , "GIN" , "GNB" , "GUY" , "HTI" , "HMD" ,
73- "VAT" , "HND" , "HKG" , "HUN" , "ISL" , "IND" , "IDN" , "IRN" , "IRQ" , "IRL" , "IMN" , "ISR" , "ITA" ,
74- "JAM" , "JPN" , "JEY" , "JOR" , "KAZ" , "KEN" , "KIR" , "PRK" , "KOR" , "KWT" , "KGZ" , "LAO" , "LVA" ,
75- "LBN" , "LSO" , "LBR" , "LBY" , "LIE" , "LTU" , "LUX" , "MAC" , "MDG" , "MWI" , "MYS" , "MDV" , "MLI" ,
76- "MLT" , "MHL" , "MTQ" , "MRT" , "MUS" , "MYT" , "MEX" , "FSM" , "MDA" , "MCO" , "MNG" , "MNE" , "MSR" ,
77- "MAR" , "MOZ" , "MMR" , "NAM" , "NRU" , "NPL" , "NLD" , "NCL" , "NZL" , "NIC" , "NER" , "NGA" , "NIU" ,
78- "NFK" , "MKD" , "MNP" , "NOR" , "OMN" , "PAK" , "PLW" , "PSE" , "PAN" , "PNG" , "PRY" , "PER" , "PHL" ,
79- "PCN" , "POL" , "PRT" , "PRI" , "QAT" , "ROU" , "RUS" , "RWA" , "REU" , "BLM" , "SHN" , "KNA" , "LCA" ,
80- "MAF" , "SPM" , "VCT" , "WSM" , "SMR" , "STP" , "SAU" , "SEN" , "SRB" , "SYC" , "SLE" , "SGP" , "SXM" ,
81- "SVK" , "SVN" , "SLB" , "SOM" , "ZAF" , "SGS" , "SSD" , "ESP" , "LKA" , "SDN" , "SUR" , "SJM" , "SWE" ,
82- "CHE" , "SYR" , "TWN" , "TJK" , "TZA" , "THA" , "TLS" , "TGO" , "TKL" , "TON" , "TTO" , "TUN" , "TKM" ,
83- "TCA" , "TUV" , "TUR" , "UGA" , "UKR" , "ARE" , "GBR" , "UMI" , "USA" , "URY" , "UZB" , "VUT" , "VEN" ,
84- "VNM" , "VGB" , "VIR" , "WLF" , "ESH" , "YEM" , "ZMB" , "ZWE" , "ALA" );
85- private static final List <Integer > numericCodes = List .of (4 , 8 , 12 , 16 , 20 , 24 , 660 , 10 , 28 , 32 ,
86- 51 , 533 , 36 , 40 , 31 , 44 , 48 , 50 , 52 , 112 , 56 , 84 , 204 , 60 , 64 , 68 , 535 , 70 , 72 , 74 , 76 , 86 ,
87- 96 , 100 , 854 , 108 , 132 , 116 , 120 , 124 , 136 , 140 , 148 , 152 , 156 , 162 , 166 , 170 , 174 , 180 , 178 ,
88- 184 , 188 , 191 , 192 , 531 , 196 , 203 , 384 , 208 , 262 , 212 , 214 , 218 , 818 , 222 , 226 , 232 , 233 , 748 ,
89- 231 , 238 , 234 , 242 , 246 , 250 , 254 , 258 , 260 , 266 , 270 , 268 , 276 , 288 , 292 , 300 , 304 , 308 , 312 ,
90- 316 , 320 , 831 , 324 , 624 , 328 , 332 , 334 , 336 , 340 , 344 , 348 , 352 , 356 , 360 , 364 , 368 , 372 , 833 ,
91- 376 , 380 , 388 , 392 , 832 , 400 , 398 , 404 , 296 , 408 , 410 , 414 , 417 , 418 , 428 , 422 , 426 , 430 , 434 ,
92- 438 , 440 , 442 , 446 , 450 , 454 , 458 , 462 , 466 , 470 , 584 , 474 , 478 , 480 , 175 , 484 , 583 , 498 , 492 ,
93- 496 , 499 , 500 , 504 , 508 , 104 , 516 , 520 , 524 , 528 , 540 , 554 , 558 , 562 , 566 , 570 , 574 , 807 , 580 ,
94- 578 , 512 , 586 , 585 , 275 , 591 , 598 , 600 , 604 , 608 , 612 , 616 , 620 , 630 , 634 , 642 , 643 , 646 , 638 ,
95- 652 , 654 , 659 , 662 , 663 , 666 , 670 , 882 , 674 , 678 , 682 , 686 , 688 , 690 , 694 , 702 , 534 , 703 , 705 ,
96- 90 , 706 , 710 , 239 , 728 , 724 , 144 , 729 , 740 , 744 , 752 , 756 , 760 , 158 , 762 , 834 , 764 , 626 , 768 ,
97- 772 , 776 , 780 , 788 , 795 , 796 , 798 , 792 , 800 , 804 , 784 , 826 , 581 , 840 , 858 , 860 , 548 , 862 , 704 ,
98- 92 , 850 , 876 , 732 , 887 , 894 , 716 , 248 );
46+ private static final Map <String , String > conversions = new HashMap <>();
9947
100- private static final Map <String , String > conversions = getConversionsMap ();
48+ private static void add (String alpha2 , String alpha3 , int numeric ) {
49+ conversions .put (alpha2 , alpha2 );
50+ conversions .put (alpha3 , alpha2 );
51+ conversions .put (Integer .toString (numeric ), alpha2 );
52+ }
53+
54+ static {
55+ add ("AF" , "AFG" , 4 );
56+ add ("AL" , "ALB" , 8 );
57+ add ("DZ" , "DZA" , 12 );
58+ add ("AS" , "ASM" , 16 );
59+ add ("AD" , "AND" , 20 );
60+ add ("AO" , "AGO" , 24 );
61+ add ("AI" , "AIA" , 660 );
62+ add ("AQ" , "ATA" , 10 );
63+ add ("AG" , "ATG" , 28 );
64+ add ("AR" , "ARG" , 32 );
65+ add ("AM" , "ARM" , 51 );
66+ add ("AW" , "ABW" , 533 );
67+ add ("AU" , "AUS" , 36 );
68+ add ("AT" , "AUT" , 40 );
69+ add ("AZ" , "AZE" , 31 );
70+ add ("BS" , "BHS" , 44 );
71+ add ("BH" , "BHR" , 48 );
72+ add ("BD" , "BGD" , 50 );
73+ add ("BB" , "BRB" , 52 );
74+ add ("BY" , "BLR" , 112 );
75+ add ("BE" , "BEL" , 56 );
76+ add ("BZ" , "BLZ" , 84 );
77+ add ("BJ" , "BEN" , 204 );
78+ add ("BM" , "BMU" , 60 );
79+ add ("BT" , "BTN" , 64 );
80+ add ("BO" , "BOL" , 68 );
81+ add ("BQ" , "BES" , 535 );
82+ add ("BA" , "BIH" , 70 );
83+ add ("BW" , "BWA" , 72 );
84+ add ("BV" , "BVT" , 74 );
85+ add ("BR" , "BRA" , 76 );
86+ add ("IO" , "IOT" , 86 );
87+ add ("BN" , "BRN" , 96 );
88+ add ("BG" , "BGR" , 100 );
89+ add ("BF" , "BFA" , 854 );
90+ add ("BI" , "BDI" , 108 );
91+ add ("CV" , "CPV" , 132 );
92+ add ("KH" , "KHM" , 116 );
93+ add ("CM" , "CMR" , 120 );
94+ add ("CA" , "CAN" , 124 );
95+ add ("KY" , "CYM" , 136 );
96+ add ("CF" , "CAF" , 140 );
97+ add ("TD" , "TCD" , 148 );
98+ add ("CL" , "CHL" , 152 );
99+ add ("CN" , "CHN" , 156 );
100+ add ("CX" , "CXR" , 162 );
101+ add ("CC" , "CCK" , 166 );
102+ add ("CO" , "COL" , 170 );
103+ add ("KM" , "COM" , 174 );
104+ add ("CD" , "COD" , 180 );
105+ add ("CG" , "COG" , 178 );
106+ add ("CK" , "COK" , 184 );
107+ add ("CR" , "CRI" , 188 );
108+ add ("HR" , "HRV" , 191 );
109+ add ("CU" , "CUB" , 192 );
110+ add ("CW" , "CUW" , 531 );
111+ add ("CY" , "CYP" , 196 );
112+ add ("CZ" , "CZE" , 203 );
113+ add ("CI" , "CIV" , 384 );
114+ add ("DK" , "DNK" , 208 );
115+ add ("DJ" , "DJI" , 262 );
116+ add ("DM" , "DMA" , 212 );
117+ add ("DO" , "DOM" , 214 );
118+ add ("EC" , "ECU" , 218 );
119+ add ("EG" , "EGY" , 818 );
120+ add ("SV" , "SLV" , 222 );
121+ add ("GQ" , "GNQ" , 226 );
122+ add ("ER" , "ERI" , 232 );
123+ add ("EE" , "EST" , 233 );
124+ add ("SZ" , "SWZ" , 748 );
125+ add ("ET" , "ETH" , 231 );
126+ add ("FK" , "FLK" , 238 );
127+ add ("FO" , "FRO" , 234 );
128+ add ("FJ" , "FJI" , 242 );
129+ add ("FI" , "FIN" , 246 );
130+ add ("FR" , "FRA" , 250 );
131+ add ("GF" , "GUF" , 254 );
132+ add ("PF" , "PYF" , 258 );
133+ add ("TF" , "ATF" , 260 );
134+ add ("GA" , "GAB" , 266 );
135+ add ("GM" , "GMB" , 270 );
136+ add ("GE" , "GEO" , 268 );
137+ add ("DE" , "DEU" , 276 );
138+ add ("GH" , "GHA" , 288 );
139+ add ("GI" , "GIB" , 292 );
140+ add ("GR" , "GRC" , 300 );
141+ add ("GL" , "GRL" , 304 );
142+ add ("GD" , "GRD" , 308 );
143+ add ("GP" , "GLP" , 312 );
144+ add ("GU" , "GUM" , 316 );
145+ add ("GT" , "GTM" , 320 );
146+ add ("GG" , "GGY" , 831 );
147+ add ("GN" , "GIN" , 324 );
148+ add ("GW" , "GNB" , 624 );
149+ add ("GY" , "GUY" , 328 );
150+ add ("HT" , "HTI" , 332 );
151+ add ("HM" , "HMD" , 334 );
152+ add ("VA" , "VAT" , 336 );
153+ add ("HN" , "HND" , 340 );
154+ add ("HK" , "HKG" , 344 );
155+ add ("HU" , "HUN" , 348 );
156+ add ("IS" , "ISL" , 352 );
157+ add ("IN" , "IND" , 356 );
158+ add ("ID" , "IDN" , 360 );
159+ add ("IR" , "IRN" , 364 );
160+ add ("IQ" , "IRQ" , 368 );
161+ add ("IE" , "IRL" , 372 );
162+ add ("IM" , "IMN" , 833 );
163+ add ("IL" , "ISR" , 376 );
164+ add ("IT" , "ITA" , 380 );
165+ add ("JM" , "JAM" , 388 );
166+ add ("JP" , "JPN" , 392 );
167+ add ("JE" , "JEY" , 832 );
168+ add ("JO" , "JOR" , 400 );
169+ add ("KZ" , "KAZ" , 398 );
170+ add ("KE" , "KEN" , 404 );
171+ add ("KI" , "KIR" , 296 );
172+ add ("KP" , "PRK" , 408 );
173+ add ("KR" , "KOR" , 410 );
174+ add ("KW" , "KWT" , 414 );
175+ add ("KG" , "KGZ" , 417 );
176+ add ("LA" , "LAO" , 418 );
177+ add ("LV" , "LVA" , 428 );
178+ add ("LB" , "LBN" , 422 );
179+ add ("LS" , "LSO" , 426 );
180+ add ("LR" , "LBR" , 430 );
181+ add ("LY" , "LBY" , 434 );
182+ add ("LI" , "LIE" , 438 );
183+ add ("LT" , "LTU" , 440 );
184+ add ("LU" , "LUX" , 442 );
185+ add ("MO" , "MAC" , 446 );
186+ add ("MG" , "MDG" , 450 );
187+ add ("MW" , "MWI" , 454 );
188+ add ("MY" , "MYS" , 458 );
189+ add ("MV" , "MDV" , 462 );
190+ add ("ML" , "MLI" , 466 );
191+ add ("MT" , "MLT" , 470 );
192+ add ("MH" , "MHL" , 584 );
193+ add ("MQ" , "MTQ" , 474 );
194+ add ("MR" , "MRT" , 478 );
195+ add ("MU" , "MUS" , 480 );
196+ add ("YT" , "MYT" , 175 );
197+ add ("MX" , "MEX" , 484 );
198+ add ("FM" , "FSM" , 583 );
199+ add ("MD" , "MDA" , 498 );
200+ add ("MC" , "MCO" , 492 );
201+ add ("MN" , "MNG" , 496 );
202+ add ("ME" , "MNE" , 499 );
203+ add ("MS" , "MSR" , 500 );
204+ add ("MA" , "MAR" , 504 );
205+ add ("MZ" , "MOZ" , 508 );
206+ add ("MM" , "MMR" , 104 );
207+ add ("NA" , "NAM" , 516 );
208+ add ("NR" , "NRU" , 520 );
209+ add ("NP" , "NPL" , 524 );
210+ add ("NL" , "NLD" , 528 );
211+ add ("NC" , "NCL" , 540 );
212+ add ("NZ" , "NZL" , 554 );
213+ add ("NI" , "NIC" , 558 );
214+ add ("NE" , "NER" , 562 );
215+ add ("NG" , "NGA" , 566 );
216+ add ("NU" , "NIU" , 570 );
217+ add ("NF" , "NFK" , 574 );
218+ add ("MK" , "MKD" , 807 );
219+ add ("MP" , "MNP" , 580 );
220+ add ("NO" , "NOR" , 578 );
221+ add ("OM" , "OMN" , 512 );
222+ add ("PK" , "PAK" , 586 );
223+ add ("PW" , "PLW" , 585 );
224+ add ("PS" , "PSE" , 275 );
225+ add ("PA" , "PAN" , 591 );
226+ add ("PG" , "PNG" , 598 );
227+ add ("PY" , "PRY" , 600 );
228+ add ("PE" , "PER" , 604 );
229+ add ("PH" , "PHL" , 608 );
230+ add ("PN" , "PCN" , 612 );
231+ add ("PL" , "POL" , 616 );
232+ add ("PT" , "PRT" , 620 );
233+ add ("PR" , "PRI" , 630 );
234+ add ("QA" , "QAT" , 634 );
235+ add ("RO" , "ROU" , 642 );
236+ add ("RU" , "RUS" , 643 );
237+ add ("RW" , "RWA" , 646 );
238+ add ("RE" , "REU" , 638 );
239+ add ("BL" , "BLM" , 652 );
240+ add ("SH" , "SHN" , 654 );
241+ add ("KN" , "KNA" , 659 );
242+ add ("LC" , "LCA" , 662 );
243+ add ("MF" , "MAF" , 663 );
244+ add ("PM" , "SPM" , 666 );
245+ add ("VC" , "VCT" , 670 );
246+ add ("WS" , "WSM" , 882 );
247+ add ("SM" , "SMR" , 674 );
248+ add ("ST" , "STP" , 678 );
249+ add ("SA" , "SAU" , 682 );
250+ add ("SN" , "SEN" , 686 );
251+ add ("RS" , "SRB" , 688 );
252+ add ("SC" , "SYC" , 690 );
253+ add ("SL" , "SLE" , 694 );
254+ add ("SG" , "SGP" , 702 );
255+ add ("SX" , "SXM" , 534 );
256+ add ("SK" , "SVK" , 703 );
257+ add ("SI" , "SVN" , 705 );
258+ add ("SB" , "SLB" , 90 );
259+ add ("SO" , "SOM" , 706 );
260+ add ("ZA" , "ZAF" , 710 );
261+ add ("GS" , "SGS" , 239 );
262+ add ("SS" , "SSD" , 728 );
263+ add ("ES" , "ESP" , 724 );
264+ add ("LK" , "LKA" , 144 );
265+ add ("SD" , "SDN" , 729 );
266+ add ("SR" , "SUR" , 740 );
267+ add ("SJ" , "SJM" , 744 );
268+ add ("SE" , "SWE" , 752 );
269+ add ("CH" , "CHE" , 756 );
270+ add ("SY" , "SYR" , 760 );
271+ add ("TW" , "TWN" , 158 );
272+ add ("TJ" , "TJK" , 762 );
273+ add ("TZ" , "TZA" , 834 );
274+ add ("TH" , "THA" , 764 );
275+ add ("TL" , "TLS" , 626 );
276+ add ("TG" , "TGO" , 768 );
277+ add ("TK" , "TKL" , 772 );
278+ add ("TO" , "TON" , 776 );
279+ add ("TT" , "TTO" , 780 );
280+ add ("TN" , "TUN" , 788 );
281+ add ("TM" , "TKM" , 795 );
282+ add ("TC" , "TCA" , 796 );
283+ add ("TV" , "TUV" , 798 );
284+ add ("TR" , "TUR" , 792 );
285+ add ("UG" , "UGA" , 800 );
286+ add ("UA" , "UKR" , 804 );
287+ add ("AE" , "ARE" , 784 );
288+ add ("GB" , "GBR" , 826 );
289+ add ("UM" , "UMI" , 581 );
290+ add ("US" , "USA" , 840 );
291+ add ("UY" , "URY" , 858 );
292+ add ("UZ" , "UZB" , 860 );
293+ add ("VU" , "VUT" , 548 );
294+ add ("VE" , "VEN" , 862 );
295+ add ("VN" , "VNM" , 704 );
296+ add ("VG" , "VGB" , 92 );
297+ add ("VI" , "VIR" , 850 );
298+ add ("WF" , "WLF" , 876 );
299+ add ("EH" , "ESH" , 732 );
300+ add ("YE" , "YEM" , 887 );
301+ add ("ZM" , "ZMB" , 894 );
302+ add ("ZW" , "ZWE" , 716 );
303+ add ("AX" , "ALA" , 248 );
304+ }
101305
102306 /**
103307 * Converts a country code to its corresponding ISO 3166-1 alpha-2 code.
@@ -112,17 +316,4 @@ public static Optional<String> convertToISO3166Code(String countryCode) {
112316 return Optional .ofNullable (conversions .get (countryCode .toUpperCase ()));
113317 }
114318
115- private static Map <String , String > getConversionsMap () {
116- var conversions = new HashMap <String , String >();
117-
118- for (int i = 0 ; i < TOTAL_COUNTRIES ; i ++) {
119- String alpha2 = alpha2codes .get (i );
120- conversions .put (alpha2 , alpha2 );
121- conversions .put (alpha3codes .get (i ), alpha2 );
122- conversions .put (numericCodes .get (i ).toString (), alpha2 );
123- }
124-
125- return conversions ;
126- }
127-
128319}
0 commit comments