0

私の入力 -

List<String> parameterNames => [value0, type1, type0, name1, value1, name0]

Collections.Sort を使用します

Collections.sort(parameterNames)

私はこのような答えを得る

[name0, name1, type0, type1, value0, value1]

このようなリストを並べ替えて取得したい

[name0,type0,value0,name1,type1,value1]

Javaでこれを行うことができますか??

4

4 に答える 4

8

カスタムComparatorsortを作成し、そのインスタンスをメソッドに渡します。

Comparator<String> myComparator = new Comparator<String>() {
    public int compare(String str1, String str2) {
        // get the number at the end, and compare on the basis of that number
        // And then do the string comparison on substring before number
    }
};

Collections.sort(parameterNames, myComparator);
于 2013-10-04T10:25:36.937 に答える
0

Collections.sort()を使用すると、 Comparatorを渡して、検索順序の上位と下位をチェックするカスタム メソッドを実装できます。

于 2013-10-04T10:26:43.677 に答える
0

このロジックを使用して独自のComparatorを実装する必要があります。

すべての値が formatstringNUMBERであると仮定すると、実装のショットは次のとおりです。

/**
 * Compares two {@link String}s of the format stringNUMBER. Assumption: There is a single numeric     part to the string,
 * always at the end.
 */
public class TrailingNumberComparator implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        int cmp = o1.substring(getStrartNumberIndex(o1)).compareTo(o2.substring(getStrartNumberIndex(o2)));
        if (cmp != 0) {
            return cmp;
        }
        return o1.compareTo(o2);
    }

    private static int getStrartNumberIndex(String s) {
        for (int i = 0; i < s.length(); ++i) {
            if (Character.isDigit(s.charAt(i))) {
                return i;
            }
        }
        return s.length();
    }
}

Collections.sort(parameterNames, new TrailingNumberComparator())その後、 ;を呼び出すことができます。

于 2013-10-04T10:45:11.793 に答える