1

それを行うための可能な方法はありますか?期待される効果は、rowMapおよびcolumnMapエントリ値が値でソートされることです。

問題は、テーブルの基になるマップがないとコンパレータを作成できないことです。

Table table = TreeBasedTable.create(?,?);

Map<String, Map<String, String>> rowMap = table.rowMap();
Map<String, String> thisMapShouldBeSortedByValues = rowMap.get(smth);

Map<String, Map<String, String>> columnMap = table.columnMap();
Map<String, String> thisMapShouldBeSortedByValues = columnMap.get(smth);

その後、常にrowMapとcolumnMapを並べ替えて、それに新しいTreeMapを割り当てる必要があります。

4

1 に答える 1

2

まず第一に、私はthisMapShouldBeSortedByValues、あなたが意味することを想定していますthisMapShouldBeSortedByKeys

TreeBasedTable は RowSortedTable を拡張するため、テーブルは列ではなく行によってのみ並べ替えられます。を呼び出すtable.columnMap()と、順序付けられていない が返されますMap<C, Map<R, V>

行でソートされているため、 は をtable.rowMap返しますSortedMap<R, Map<C, V>>。したがって、マップは行キーでソートされますが、Map<C, V>値はソートされていないマップであるため、呼び出しがrowMap.get()順序付けられていないマップを返すのはなぜですか。

table.rowMap() を呼び出してから rowMap.get() を呼び出して取得しようとしている SortedMap は、代わりに table.rowKeySet() と table.row(R rowKey) を呼び出すことで取得できます (マップを作成しますもともと呼び出して取得したかったtable.rowMap()

ImmutableSortedMap.Builder<String, SortedMap<String, String>> builder = ImmutableSortedMap.builder();

for (String rowKey : table.rowKeySet()){
     builder.put(rowKey, table.row(rowKey)) ;
}

 SortedMap<String, <SortedMap<String, String>> thisMapIsSortedByKeys = builder.build();
于 2012-09-26T18:42:28.860 に答える