2014-02-07 2 views
3

Так у меня есть список кучи буквенно-цифровые элементы, такие как ...Компаратора для использования с Collections.sort() для alphanumberic списка

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

Я искал использовать Collections.sort() для сортировки этого список, но мне нужно отсортировать в порядке (1234,AAAA,aaaa,BBBB,bbbb,...) с номерами сначала, а затем верхние и строчные слова. Все элементы являются строками, включая любые видимые числа. Будет Collections.sort() обрабатывать этот случай, так как они все на самом деле строки, или если не то, что Comparator я использовал бы для этого? Или есть ли другой способ, который может быть более эффективным для этого, например, с использованием регулярных выражений?

Спасибо.

+1

Почему бы вам не попробовать? –

+0

@JBNizet, потому что всегда есть кто-то, желающий пещера;) –

+0

Я обычно был бы JB, но в настоящий момент я не могу ничего кодировать. Я просто пытаюсь мысленно работать с ошибкой, и решил, что проверю, когда смогу написать снова. –

ответ

5

Вы можете использовать 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); 

выходы:

без Collator: [1234, AAAA, BBBB, аааа, BBBB]
с Collator: [1234, AAAA, аааа , BBBB, bbbb]

Примечание: вам может потребоваться другой коллактор для того, что вам нужно, хотя этот кажется прекрасным. В худшем случае вы можете создать a RuleBaseCollator with your specific rules.

+0

Хорошо, спасибо! Я не могу проверить это прямо сейчас, но из того, что я вижу, это проверяет. Это должно быть способно работать на то, что я делаю. –

+0

Вы сказали в вопросе «... за которым следует верхний и нижний регистр слов», но вы также говорите, что «aaaa» должен предшествовать «BBBB». Я думаю, вы ошиблись в одном из этих требований. –

+0

Нет, они должны быть в алфавитном порядке, но если есть повторяющиеся строки, а один - в верхнем регистре, сначала начинается верхний регистр. Извините за любую путаницу. AAAA-> AAAA-> BBBB-> BBBB –

Смежные вопросы