我有一个TreeBasedTable<String,String,CustomType>
结构,我需要根据start
和end
范围索引获取子集,例如fromindex
到toindex
。 cellSet
方法不会返回SortedSet
。对此最好的方法是什么?
我想过做Lists.newArrayList(structure.cellSet()).subList(start,end)
,但看起来不是一件有效的事情。
答案 0 :(得分:3)
如果startindex
和endindex
是整数位置,那么您的ArrayList
实现实际上与可行的最佳位置相差甚远,尽管写入效率稍高一些
FluentIterable.from(table.cellSet()).skip(fromIndex).limit(toIndex).toList()
该实现不会将任何元素复制到结果列表中。
一般来说,对于任意SortedSet
,SortedMap
或几乎任何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);
所以start
和end
可以rowMap
使用subList(start,end)
就像List
一样。