1

このようなマップを作成すると:

Map<Object, ArrayList<Object>> multiMap = new HashMap<Object, ArrayList<Object>>();

の値を並べ替える方法はありますかArrayList<Object>?

私はそのようにマルチマップをループすることを考えていました:

for (Entry<Object, ArrayList<Object>> entry : multiMap.entrySet()) {
    for (int i = 0; i < entry.size(); i++) {
           //retrieve all array items and place in new array to sort
    }

オブジェクト ---> arrayList (2 つの要素を含む) object ---> arrayList (2 つの要素を含む) object ---> arrayList (2 つの要素を含む) object ---> arrayList (2 つの要素を含む)

上記のすべてのarrayListsのすべての要素を取得し、それらで並べ替えたいと思います。マルチマップにとどまる必要はありません..もっと良い方法がないか探していました..

編集: ここでのポイントは、すべてのarrayListのすべての配列要素を、他のすべてのarrayListの他のすべての配列要素に対してソートすることです....したがって、単に並べ替えを呼び出すほど単純ではありませんが、より良い/よりクリーンな方法があるかどうか疑問に思っていますこれを行う方法は?私は地図にあまり詳しくありません...助けていただければ幸いです..

4

3 に答える 3

1

編集に基づいて、マップ内のすべてのオブジェクトを取得して並べ替えたいようです。マップ内の値を並べ替える直接的な方法はないため、すべての項目を並べ替えるには、それらを 1 つのリストに統合し、Collections.sort() 全体をまとめるのが最も簡単です。

public ArrayList<Object> sortAllValues() {
    ArrayList<Object> allEntries = new ArrayList<Object>();
    for (Entry<Object, ArrayList<Object>> entry : multiMap.entrySet())
        allEntries.addAll(entry.getValue());
    }
return Collections.sort(allEntries);
}

オブジェクトに Comparable がない場合は、オブジェクトに Comparable を実装する必要があります。これは、 Comparableを実装する方法に関する良いガイドです

于 2013-03-19T14:27:14.897 に答える
0

Apache Commons と Google Collections の MultiMap 実装を確認してください。並べ替え/順序付けを既にサポートしているものがあるかもしれません。

于 2013-03-19T14:13:16.100 に答える
0

実際には、ArrayList が Map の値であることを気にする必要はありません。これは問題ではありません。このArrayList<Object>ようなリストを並べ替えるのと同じ方法で、これを並べ替えます。ここでの問題は、オブジェクトを必要な型にキャストするある種の Comparator を実装する必要があることです。一般に、並べ替えを容易にするために、Object よりも具体的な型の ArrayList を個人的に作成します。

于 2013-03-19T14:11:28.573 に答える