有什么可行的方法吗?预期的效果是 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。
最佳答案
首先,我假设thisMapShouldBeSortedByValues
,你的意思是thisMapShouldBeSortedByKeys
TreeBasedTable 扩展了 RowSortedTable,因此表仅按行排序,而不按列排序。调用table.columnMap()
给你一个无序的 Map<C, Map<R, V>
.
由于它是按行排序的,因此 table.rowMap
返回 SortedMap<R, Map<C, V>>
。所以 map 是根据它的行键排序的,但是Map<C, V>
value 是一个未排序的映射,因此为什么调用 rowMap.get()
返回一个无序映射。
您尝试通过调用 table.rowMap() 然后调用 rowMap.get() 来获取的 SortedMap 可以通过调用 table.rowKeySet() 和 table.row(R rowKey) 来获取,如下所示(您构建您原本想通过调用 table.rowMap()
获取的 map :
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();
关于java - 根据值对 Guava 表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11256840/