1

Map.entrySet() を使用して、現在キーでソートされた TreeMap を表示しています。ただし、値とキーの両方でソートされたコンテンツを表示したい。これは可能ですか?もしそうなら、どうすればいいですか?

編集:言い換え:

現在、キーでソートされたツリーマップを表示しています。最初は値でソートして表示したいのですが、値が同じならキーの昇順で表示したいです。

4

2 に答える 2

2

あなたが何を達成しようとしているのか正確にはわかりません.TreeMapのキーは一意であるため、コンテンツをキーでソートすると、値でソートしても意味がありません. キーでソートされたリストと値でソートされたリストの 2 つのリストが必要な場合は、2 つの TreeMap を使用するか、 Bimap などの特別なコンテナーを使用できます

于 2011-10-22T10:37:10.997 に答える
1

Comparatorを使用して、マップ内のEntryオブジェクトを並べ替えます。

public class MyComparator implements Comparator<Entry<String, String>> {
    @Override
    public int compare(Entry<String, String> left, Entry<String, String> right) {
        int valueComp = left.getValue().compareTo(right.getValue());
        if (valueComp != 0)
            return valueComp;
        int keyComp = left.getKey().compareTo(right.getKey());
        return keyComp;
    }
}

@Test
public void testSorting() throws Exception {
    Map<String, String> tree = new TreeMap<String, String>();
    tree.put("D", "A");
    tree.put("A", "A");
    tree.put("F", "C");
    tree.put("E", "B");
    tree.put("C", "A");
    tree.put("B", "B");
    Set<Entry<String, String>> entrySet = tree.entrySet();
    Comparator<? super Entry<String, String>> comparator = new MyComparator();
    TreeSet<Entry<String, String>> sorted = new TreeSet<Entry<String, String>>(comparator);
    sorted.addAll(entrySet);
    for (Entry<String, String> entry : sorted) {
        System.out.println(entry);
    }
}

結果:

A=A
C=A
D=A
B=B
E=B
F=C
于 2011-10-22T13:21:59.990 に答える