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()给你一个 unordered Map<C, Map<R, V>

由于它是按行排序的,因此table.rowMap返回 a 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 回答