1

Stringオブジェクトのリストを並べ替える簡単な方法があるかどうかを確認しようとしています。私が今直面している問題は、Collections.sort(...)メソッドが機能していないことです。

これは私の元のリストであり、私の要件のためにソートされています。

    List<String> values = new ArrayList<String>();


    values.add("section_1");
    values.add("section_2");
    values.add("section_3");
    values.add("section_4");
    values.add("section_5");
    values.add("section_6");
    values.add("section_7");
    values.add("section_8");
    values.add("section_9");
    values.add("section_10");
    values.add("section_11");
    values.add("section_12");
    values.add("section_13");

そして、Collections.sort(values)を実行した後、順序が壊れます。

section_1
section_10
section_11 
section_12
section_13
section_2
section_3
section_4
section_5
section_6
section_7
section_8
section_9

この動作は、Collections.sort(...)で使用されている辞書式順序によるものですか?この種類を希望どおりに機能させる簡単な方法はありますか?

前もって感謝します。

4

3 に答える 3

9

この動作は、Collections.sort(...)で使用されている辞書式順序によるものですか?

絶対。自然順序に従って文字列を並べ替えました。

この種類を希望どおりに機能させる簡単な方法はありますか?

使用する比較を表すクラス実装を作成し、Comparator<String>それを2番目の引数としてに渡しますCollections.sort。ただし、ロジックは自分で作成する必要があります(または、サードパーティのライブラリを見つけて作成する必要があります)。これを行うための標準ライブラリには何もないと思います。(大文字と小文字の区別や、場合によっては他のすべての種類のことを検討する必要があります。)

もちろん、データをなどsection_01に変更できるsection_02場合は、自然順を使用できることを意味します...

于 2012-06-04T19:17:55.867 に答える
1

文字列の数値部分を抽出し、それらを整数インスタンスに変換して、それらの整数を比較するカスタムコンパレータを使用する必要があります。

public class SectionComparator implements Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        Integer i1 = Integer.valueOf(s1.substring(s1.indexOf('_') + 1));
        Integer i2 = Integer.valueOf(s1.substring(s2.indexOf('_') + 1));
        return i1.compareTo(i2),
    }
}

ただし、文字列を使用してセクションを表す代わりに、number属性、メソッド、およびnumber属性を使用した自然な順序をSection持つオブジェクトを使用することもできます。toString()

于 2012-06-04T19:19:30.857 に答える
0

この投稿も参照してください

英数字アルゴリズムを使用する必要があります

以前にコンパレータの実装を提案した人もいます。これが実装です

幸運を!

于 2012-06-04T19:24:14.210 に答える