从具有范围列的表中获取行

时间:2013-02-11 21:10:58

标签: java guava

如果我有一个像这样的大番石榴桌:

Table<Foo, Range<Long>, Bar> myTable;

我有一个很长的值,还有一个Foo对象 - 我希望得到一个包含我的long的Range对象。

现在,我能做的最好的事情就是在我需要的范围内使用Foo键获取所有Bar:

Map<Range<Long>, Bar> row = cache.row(myFoo);
for (Range<Long> range : row.keySet()) {
            if (range.contains(myLong))  {
                return Arrays.asList(sample.get(myLong));
            }
        }

正如你所看到的,我正在抓住桌子上的那一行,并在范围内迭代寻找我的一个包含myLong的封闭范围的Bar。

有没有更好的方法来找到没有for循环的对象?从那个Ranges列中获取RangeMap的速度可能比那个循环更快?

1 个答案:

答案 0 :(得分:0)

Map<Foo, RangeMap<Long, Bar>>听起来在这里非常合适。它不像Table那样漂亮,但它是在不到线性时间内执行该操作的唯一方法。