0

私は ArrayList を持っており、内容を並べ替えて、英語のアルファベットを含むものを最初に並べ替え、次に数字と英語以外の文字を含むものを最後に並べ替えたいと考えています。

例: A、B、C ... Z、1、2、3 ... 9、_test1、_2、...

現在、アイテムをアルファベット順に並べ替える方法しか知りません。提案?

class Comparator implements Comparator<Name> {
    @Override
    public int compare(Name name1, Name name2) {            
        return name1.getName().toLowerCase().compareTo(name2.getName().toLowerCase());
    }
}
4

1 に答える 1

6

Comparator の次の実装を使用できます。

    Comparator<String> comparator = new Comparator<String>() {

        @Override
        public int compare(String lhs, String rhs) {
            boolean lhsStartsWithLetter = Character.isLetter(lhs.charAt(0));
            boolean rhsStartsWithLetter = Character.isLetter(rhs.charAt(0));

            if ((lhsStartsWithLetter && rhsStartsWithLetter) || (!lhsStartsWithLetter && !rhsStartsWithLetter)) {
                // they both start with letters or not-a-letters
                return lhs.compareTo(lhs);
            } else if (lhsStartsWithLetter) {
                // the first string starts with letter and the second one is not
                return -1;
            } else {
                // the second string starts with letter and the first one is not
                return 1;
            }
        }
    };
于 2013-02-26T08:19:02.007 に答える