私は少しグーグルではありますが、このような特定の問題の解決策を見つけることができませんでした。私はのPOJOを持っています。フィールドにはdisplayCode
(String型)というフィールドがあります。 displayCode
は異なるフォーマットを持つことができます。いくつかの例:キャストなしで部分的に数値の文字列を比較する
622
622-S
622-1
623
624
625
625-S
625-1
625-1-S
625-2
625-2-S
並べ替え後も、上に示した順序にする必要があります。明らかに私は必要なもの、スイートはありません
1
10
100
101
102
...
:通常s1.compareTo(s2);
で、私はこのような順序を取得します。残念ながら私はこれをどのようにスムーズに(そして他の方法でも)達成する方法についての計画はありません。
List<String> s = new ArrayList<String>(Arrays.asList(new String[] { "622", "622-S", "622-1", "623", "625",
"625-S", "625-1", "625-1-S", "625-2", "625-2-S", "6", "60", "666", "1", "2", "3" }));
Collections.sort(s,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 0;
}
});
System.out.println(s);
EDITを:: 私の最初に考えたのはキャストに行くでしょう。また、私は(あなたはそれで遊ぶことができます)8.
コードテストの目的のために、Javaからは何も使用できないことに、注意してください最初の-
までの数字をintに変換し、それを比較して、他の部分と同じように作業してください。しかし、これは滑らかに聞こえません。
* smooth *を心配する前に、* works *に焦点を当てることができます。 –
あなたの唯一の問題は、通常の比較があなたに与えるので、最後にSと思われる: 1,2,3,6,60,622,622-1,622-S、623,625,625-1,625 -1-S、625-2,625-2-S、625-S、666 –
実際に上記の配列の要素の「不良」ソートを表示できますか? –