0

このマップを並べ替えたい:

Map<String, Collection<String[]>> map = new HashMap<String, Collection<String[]>>();

マップ内の例は次のとおりです。

String key = "MyKey";
Collection<String[]> values = new ArrayList<String[]>();
map.put(key, values);

String[] firstValues = { "John", "21", "M"};
values.add(firstValues); //Name, Age, Gender

String[] secondValues = { "Jane", "31", "W"};
values.add(secondValues);

だから最後に、私は持っています:

Mykey : [["John", "21", "M"], ["Eve", "31", "W"]];

そして、私はやりたい:

Collection<String[]> values = map.get(key);

次に、特定のインデックスで並べ替えます。たとえば、最初のインデックス (名前) のアルファベット順、または 2 番目のインデックス (年齢) で並べ替えます。したがって、最初のソート後は次のようになります。

Mykey : [["Eve", "31", "W"], ["John", "21", "M"]];

2 番目の並べ替え後:

Mykey : [["John", "21", "M"], ["Eve", "31", "W"]];
4

2 に答える 2

5

あなたのコードは、Rubyなどの動的言語で開発者が経験したもののように私には見えます。おそらく、これがJavaの最善の方法ではないことに気付くでしょう。String[]これらの文字列をプロパティとして含む適切なオブジェクトを使用してモデル化する必要があります。

また、質問のマップ部分はあまり関連性がないと思います。実際には、プロパティの1つで並べ替える必要のあるオブジェクトのコレクションを処理しています。マップにそのようなコレクションがいくつかあることは、ソリューションに影響を与えません。

@Havard Geithusがすでにアドバイスしているように、並べ替え自体は実行されます。

于 2012-07-28T21:01:51.963 に答える
3

コンパレーターを指定するAPIを使用し、java.util.Collections.sort(List list, Comparator c)必要に応じて実装します(1つは名前用、もう1つは年齢用)

また、要素として使用する代わりに、これらの変数をメンバーとして持つString[]{name, age, gender}クラスを作成します。Personおそらく、このクラス内にも必要な2つのコンパレータを配置します。

public static final Comparator<Person> AGE_COMPARATOR = new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        // implement
    }
};

今、あなたは単に呼び出すことができます

Collections.sort(map.get(key), Person.AGE_COMPARATOR);

@Vatevが提案したように、コレクションインターフェイスではなくリストインターフェイスを使用したと仮定します。

Map<String, List<Person>> map = new HashMap<String, List<Person>>();
于 2012-07-28T20:47:59.770 に答える