アスタリスク (*) を含む値と含まない値の両方を持つハッシュマップがあります。(*) を含むすべての値が最後になるように、値を並べ替えたいと思います。このコード行を使用してみました:
SortedSet<String> orderedValues = new TreeSet<String>(myHashMap.values());
ただし、アルファベット順に並べ替えてから、すべての値を (*) で最初に配置します。とにかくそれを逆にすることはありますか???
Strings のカスタム Comparator を定義し、TreeSet を構築するときにそれを Comparator として渡す必要があります。詳細な回答を含む同様の StackOverflow の質問を次に示します。
TreeSet カスタム コンパレータ アルゴリズム .. 文字列比較
アスタリスクで何をしているのかを正確に指定していませんが、以下は、文字列にアスタリスクが含まれているかどうかに基づいてソートする例です。List<String>
ここでは a の代わりに aを使用していることに注意してくださいHashMap
。から値を取得しているという事実HashMap
は、実際には重要ではありません。どの Java に対しても同じことを行いますCollection
。
List<String> strs = Arrays.asList("a","b","c","a*","b*");
Comparator<String> starCompare = new Comparator<String>() {
@Override public int compare(String a, String b) {
int aStar = a.contains("*") ? 1 : 0;
int bStar = b.contains("*") ? 1 : 0;
return (aStar != bStar)
? Integer.compare(aStar, bStar)
: a.compareTo(b);
}
};
// Without comparator
SortedSet<String> set1 = new TreeSet<String>(strs);
System.out.println(set1); // => [a, a*, b, b*, c]
// With comparator
SortedSet<String> set2 = new TreeSet<String>(starCompare);
set2.addAll(strs);
System.out.println(set2); // => [a, b, c, a*, b*]
set2
custom を使用するの出力で、 Comparator
an を含むエントリ*
がソートされたセットの最後にあることに注意してください。
あなたはあなたを逆にすることができますTreeset
TreeSet<String> treeSetObj = new TreeSet<String>( Collections.reverseOrder() ) ;