java - 根据值对 Guava 表进行排序

标签 java guava comparator

有什么可行的方法吗?预期的效果是 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/

相关文章:

java - 在 Java Comparator 中比较两个 TreeNode(或 DefaultMutableTreeNode)对象

java - log4j异常处理

java - 如何访问tomcat session 上下文?

java - 使用索引值从 HashBasedTable(Guava 集合)中提取数据

java - 将数组列表打印到输出文件中?

java - 如何按 boolean 字段对 ArrayList 对象进行排序

Java:控制选择和迭代?这是什么意思?

java - JPA,从实体开始与数据库模式

java - 使用 Google Collections 创建弱多图

java - 序列化 Collat​​or 实例