0

アスタリスク (*) を含む値と含まない値の両方を持つハッシュマップがあります。(*) を含むすべての値が最後になるように、値を並べ替えたいと思います。このコード行を使用してみました:

    SortedSet<String> orderedValues = new TreeSet<String>(myHashMap.values());

ただし、アルファベット順に並べ替えてから、すべての値を (*) で最初に配置します。とにかくそれを逆にすることはありますか???

4

3 に答える 3

1

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*]

set2custom を使用するの出力で、 Comparatoran を含むエントリ*がソートされたセットの最後にあることに注意してください。

于 2013-07-25T15:47:22.040 に答える
0

あなたはあなたを逆にすることができますTreeset

 TreeSet<String> treeSetObj = new TreeSet<String>( Collections.reverseOrder() ) ;
于 2013-07-25T15:48:37.937 に答える