基于来自google guava TreeBasedTable的索引的子集

时间:2013-08-28 21:05:56

标签: java guava treemap treeset

我有一个TreeBasedTable<String,String,CustomType>结构,我需要根据startend范围索引获取子集,例如fromindextoindexcellSet方法不会返回SortedSet。对此最好的方法是什么?

我想过做Lists.newArrayList(structure.cellSet()).subList(start,end),但看起来不是一件有效的事情。

2 个答案:

答案 0 :(得分:3)

如果startindexendindex是整数位置,那么您的ArrayList实现实际上与可行的最佳位置相差甚远,尽管写入效率稍高一些

FluentIterable.from(table.cellSet()).skip(fromIndex).limit(toIndex).toList()

该实现不会将任何元素复制到结果列表中。

一般来说,对于任意SortedSetSortedMap或几乎任何Java附带的排序数据结构,都没有一种有效的方法。

答案 1 :(得分:0)

使用TreeBasedTable时,rowMap()的实施实际上会返回SortedMap

所以你应该使用:

@SuppressWarnings("unchecked") // safe cast because TreeBasedTable returns SortedMap
final SortedMap<String, Map<String, CustomType>> rowMap = (SortedMap<String, Map<String, CustomType>>) myTable.rowMap();
final SortedMap<String, Map<String, CustomType>> subRowMap = rowMap.subMap(start, end);

所以startend可以rowMap使用subList(start,end)就像List一样。