2011-06-30 20 views
0

もっと複雑なマップに問題があります。標準Map<Long, String>のために、私のようなものだろう:コレクションと自然な順序のマップ<Long、Map <String、String >>

Ordering<Long> valueComparator = Ordering.natural().onResultOf(Functions.forMap(myMap)); 
Map<Long, String> orderedMap = ImmutableSortedMap.copyOf(myMap, valueComparator); 

をしかし、私は、それはまだ長い順、Map<Long, Map<String, String>>を好きに取得するように見えることはできません。多分私は何かを欠いているでしょうか?以下は動作しません...

Ordering<Long> valueComparator = Ordering.natural().onResultOf(Functions.forMap(myOtherMap)); 
Map<Long, Map<String, String>> orderedMyOtherMap = ImmutableSortedMap.copyOf(myOtherMap,valueComparator); 

答えて

1

あなたの最初の例では、あなたがしていると思われることをしていません。これはStringの値で注文されたマップを作成して、Longの各キーに対応しています。あなただけのキーで注文したい場合は、やるだけの思い:

ImmutableSortedMap<Long, String> orderedMap = ImmutableSortedMap.copyOf(myMap); 

同じことがMap<Long, Map<String, String>>のために働くだろう。あなたがしようとしている理由がうまくいかないのは、Map<String, String>Comparableではないということです。そのため、自然な順序はありません。

脇に、 Map<Long, Map<String, String>>ではなくTable<Long, String, String>を使用することを検討してください。行と列のキーをソート順に格納するTreeBasedTableもあります。

関連する問題