像Treemap这样的数据结构,带有重复键和Java中的ceilingkey

时间:2016-05-24 10:36:58

标签: guava treemap multimap ceiling

更新

Multimap<Double, PowerHost> createHostListofAvailableMIPS()
{
        List<PowerHost> tempList = hosts;
        Multimap<Double, PowerHost> listOfAvailableMIPS = TreeMultimap.create(Ordering.natural(), Ordering.arbitrary());

        for (PowerHost p : tempList)
        {
            //build tree
            listOfAvailableMIPS.put(p.getAvailableMips(), p);
        }
        return listOfAvailableMIPS;
}


PowerHost getHost (Vm vm)
    {
        this.reqdMIPS = vm.getMips();
        Multimap<Double, PowerHost> sortedPHs = createHostListofAvailableMIPS();
        PowerHost selectedHost = null;                  
        //gets mips that are >= reqdMIPS ie best matches
        NavigableSet<Double> ns =  (NavigableSet<Double>) sortedPHs.keySet();
        Double x = ns.ceiling(reqdMIPS);

//other codes follow

}

我注意到有一个。在

的陈述中
Treemap.<Double, PowerHost>create().keySet().ceiling(K)

我相信这也可行,当我回到家时会尝试这个。但是使用上面的代码:

NavigableSet<Double> ns = (NavigableSet<Double>) sortedPHs.keySet()

只返回一个项目,而不是一组双打

java中的构建结构是否是Treemap + multimap特征集的组合?

我想要的基本上是一个可以支持多个/重复键的Treemap。我知道multimap(来自番石榴)可以做到这一点,但我不能在Multimap上使用ceilingkey(K)。

我最初的计划是使用TreeMultimap然后使用keyset()。ceiling(k) 但是eclipse一直拒绝这些陈述:

Multimap <Double, someObject> myMM= TreeMultimap.create();  

抱怨“绑定不匹配”,说someObject不是

的有效替代品

keyset()。ceiling(k)抱怨在Set中未定义方法上限。

帮助/建议将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

要解决第一个问题,您需要使用Result代替TreeMultimapTreeMultimap要求密钥和值均为Comparable。使用MultimapBuilder,您可以将Comparable个密钥与非Comparable值混合,并仍然可以获得已排序的keySet

ListMultimap<Double, SomeObject> myMM =
    MultimapBuilder.treeKeys().arrayListValues().build();

要解决第二个问题,您需要将返回的keySet转换为SortedSet。 (这是MultimapBuilder。)但是,这仍然不足以让你ceiling,因为这只能在NavigableMap上提供:(你&#39; ll必须使用类似getFirst(tailSet(k), null)的内容。

相关问题