更新
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中未定义方法上限。
帮助/建议将受到高度赞赏。
答案 0 :(得分:2)
要解决第一个问题,您需要使用代替
TreeMultimap
。 TreeMultimap
要求密钥和值均为Comparable
。使用MultimapBuilder
,您可以将Comparable
个密钥与非Comparable
值混合,并仍然可以获得已排序的keySet
。
ListMultimap<Double, SomeObject> myMM =
MultimapBuilder.treeKeys().arrayListValues().build();
要解决第二个问题,您需要将返回的keySet
转换为SortedSet
。 (这是MultimapBuilder
。)但是,这仍然不足以让你ceiling
,因为这只能在NavigableMap
上提供:(你&#39; ll必须使用类似getFirst(tailSet(k), null)
的内容。