私はC#の男ではありません.C#の男ではありません.リストに 10 個の要素。
値が異なることがわかっている場合、それは些細なことです。キーと値を交換して SortedMap に変換するだけです。したがって、値は明確ではないと仮定しています。つまり、同じ数値が複数回表示される可能性があります。
その場合、それは些細なことではなく、C# の例ほど単純ではありません。私が最初に考えたのは、セット内の各要素がキーと値が交換されるマップの Map.Entry である、カスタム コンパレータを使用して並べ替えられたセットを作成することでした。
これには、実際には Java でかなりのコードが必要になります。Heres 1 つの試み:
// Create a SortedSet of the reversed entry set, with a custom comparator for sorting
SortedSet<Map.Entry<Integer, String>> sortedSet = new TreeSet<Map.Entry<Integer, String>>(
new Comparator<Map.Entry<Integer, String>>() {
public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
// sort by key, then by value --> in descending order
int keyCompareResult = -o1.getKey().compareTo(o2.getKey()); // negate --> descending
int valueCompareResult = o1.getValue().compareTo(o2.getValue());
return keyCompareResult == 0 ? valueCompareResult : -keyCompareResult;
}
});
// Add all entries of the map to the sorted set
for (Map.Entry<String, Integer> entry : map.entrySet()) {
Map.Entry<Integer, String> reversedEntry = new AbstractMap.SimpleEntry<Integer, String>(entry.getValue(), entry.getKey());
sortedSet.add(reversedEntry);
}
// Convert the 10 first elements to the resulting list
int N = 10;
List<String> result = new ArrayList<String>(N);
Iterator<Map.Entry<Integer,String>> iterator = sortedSet.iterator();
while (iterator.hasNext() && result.size() < N) {
Map.Entry<Integer, String> entry = iterator.next();
result.add(entry.getValue());
}