VALUE(?) の上位 3 つの最大値を並べ替えて取得しようとしています。
Map<String,?> points = map
使用Map<String, String>
してみましたが、正常に動作しますが、この場合はMap<String, ?>
.
そもそも非オブジェクトをソートすることはできないので、ではなく値をComparable
持つマップが必要になります。ただし、それがあれば、次のようなことができます。Comparable
?
public static <T extends Comparable<? super T>> List<T> sortValues(Map<?, T> map) {
List<T> buffer = new ArrayList<T>(map.values());
Collections.sort(buffer);
return(buffer);
}
sortValues
次に、の最初の3つのオブジェクトを選択するなど、戻り値を使用して必要な操作を実行できます。
値の型は実装する必要がありますComparable
。
マップのサイズが大きすぎない場合は、次のような方法を試すことができます。
private <T extends Comparable> SortedSet<T> sortValues(final Map<?, T> m)
{
final SortedSet<T> result = new TreeSet<>();
result.addAll(m.values());
return result;
}
私はこれをテストしていませんが、すべての型宣言が正しいと思います。次に、ソートされたセットから最初の要素または場合によっては最後の要素を取得します。Comparator
オブジェクトの順序付け方法を選択するために、オプションでセットに独自のものを提供できると思います。