0

VALUE(?) の上位 3 つの最大値を並べ替えて取得しようとしています。

Map<String,?> points = map

使用Map<String, String>してみましたが、正常に動作しますが、この場合はMap<String, ?>.

4

2 に答える 2

0

そもそも非オブジェクトをソートすることはできないので、ではなく値を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つのオブジェクトを選択するなど、戻り値を使用して必要な操作を実行できます。

于 2013-03-17T02:49:15.567 に答える
0

値の型は実装する必要があります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オブジェクトの順序付け方法を選択するために、オプションでセットに独自のものを提供できると思います。

于 2013-03-17T02:44:30.400 に答える