Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparator to be used with Collections.sort() for a alphanumberic list

Tags:

java

sorting

So I have a list of a bunch of alphanumeric items like...

"123456"
"alpha"
"tango"
"beta"
...

I was looking to use Collections.sort() for the sorting of this list, but I need to sort in the order (1234,AAAA,aaaa,BBBB,bbbb,...) with numbers first, followed by upper then lower case words. All the elements are strings including any apparent numbers. Would Collections.sort() handle this case since they are all actually strings, or if not what Comparator would I use to accomplish this? Or is there some other way that might be more efficient to accomplish this like using regular expressions?

Thanks.

like image 581
Alex Johnson Avatar asked Dec 21 '25 12:12

Alex Johnson


1 Answers

You could use a Collator:

List<String> list = Arrays.asList("1234","AAAA","aaaa","BBBB","bbbb");
Collator c = Collator.getInstance(Locale.ENGLISH);
c.setStrength(Collator.CANONICAL_DECOMPOSITION);

Collections.sort(list);
System.out.println("without collator: " + list);
Collections.sort(list, c);
System.out.println("with collator: " + list);

outputs:

without collator: [1234, AAAA, BBBB, aaaa, bbbb]
with collator: [1234, AAAA, aaaa, BBBB, bbbb]

Note: you may need a different collator for what you need although this one seems fine. In the worst case scenario, you can create a RuleBaseCollator with your specific rules.

like image 128
assylias Avatar answered Dec 24 '25 04:12

assylias



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!