SortedMultiset返回对象的集合(不仅仅是对象的数量)?

时间:2013-02-05 00:55:12

标签: java collections guava

我想组织一组Events,其中包含唯一的idtime。我想在特定的时间范围内有效地查询Events。某些Events可能具有相同的time但不同的id

某些Events可能具有相同的time,因此Guava TreeMultiSet类非常接近我的需要。

但是,请考虑以下psudo-code代码段:

class Event
{
    Object id;
    long time;
}

TreeMultiSet<Event> s = TreeMultiSet.create( new Comparator<Event>( )
        {
            @Override
            public int compare( Event o1, Event o2 )
            {
                if ( o1.time < o2.time )
                {
                    return -1;
                }
                else if ( o1.time > o2.time )
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
        });

s.add( new Event( "a", 0 ) );
s.add( new Event( "b", 0 ) );
s.add( new Event( "c", 0 ) );

在三次添加之后,TreeMultiSet将只包含&#34; a&#34; Event 3次,因为TreeMultiSet仅考虑Comparator且三个Event对象具有相同的time

我的第一个想法是将id作为我的Comparator实施的一部分,以区分Eventstime相同,但我的ids没有自然排序(他们只是Objects并且不必实现Comparable)。

在制作subSet()headSet()等问题时,这也很尴尬...查询 - 我不想要id对象的Event我用它来设置查询边界。

我可以从头开始实现自定义(或者更有可能将繁重的工作委托给一些底层收藏),但是我想确保那里已经没有我丢失的东西了。

1 个答案:

答案 0 :(得分:2)

听起来你真正想要的是TreeMultimap,尽管它目前不支持您想要的子多地图视图。但这可能会改变。也就是说,它的asMap方法返回一个完整的NavigableMap。