Java 如何对番石榴进行分类';“仅通过关键点进行多重映射?”?
我有番石榴图书馆的多重地图。我只想按键排序。我试过:Java 如何对番石榴进行分类';“仅通过关键点进行多重映射?”?,java,guava,treemaps,Java,Guava,Treemaps,我有番石榴图书馆的多重地图。我只想按键排序。我试过: Multimap<String, MyObj> sortedMultiMap = TreeMultimap.create(Ordering.from(new Comparator<String>() { @Override public int compare(String lhs, String rhs) { //my comparison here
Multimap<String, MyObj> sortedMultiMap =
TreeMultimap.create(Ordering.from(new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
//my comparison here
}
}), Ordering.natural());//i want not to sort values at all,MyObj doesn't implement Comparable
sortedMultiMap.putAll(notSortedMultiMap);
Multimap-sortedMultiMap=
TreeMultimap.create(Ordering.from)(newcomparator()){
@凌驾
公共整数比较(字符串lhs、字符串rhs){
//我的比较在这里
}
}),Ordering.natural())//我不想对值进行排序,MyObj不实现可比较的
sortedMultiMap.putAll(非sortedMultiMap);
但正如您所看到的,TreeMultiMap.create方法有两个参数——键和值的比较器。如何仅按键对MultiMap进行排序?在Louis Wasserman给出答案后更新即使我的原始答案解决了问题并回答了问题,我认为这是更优雅的解决方案
Multimap<String, MyObj> multimap =
MultimapBuilder.treeKeys(/* you comparator here */).linkedListValues().build();
使用MultimapBuilder:
Multimap<String, MyObj> multimap =
MultimapBuilder.treeKeys().linkedListValues().build();
Multimap Multimap=
MultimapBuilder.treeKeys().linkedListValues().build();
我已经试过了,但似乎Ordering.arbitral()只是随机混合了我的值。我需要默认顺序,可能它与存储为集合的MultiMap值相关-但应该是LinkedList?嗯,它应该在VM的生命周期中给出相同的顺序。“所施加的命令没有任何意义,但在VM的生命周期中,它是不变的”。但也许这在您的用例中也不起作用?您的用例中的“默认顺序”是指“插入顺序”吗?您所说的“我需要默认顺序”是什么意思?(这是你问题标题的第七个谷歌结果)很好,我用这个解决方案更新了我的答案,因为它是公认的答案,而且这个解决方案更优雅。希望这对你没问题。
Multimap<String, MyObj> multimap =
MultimapBuilder.treeKeys().linkedListValues().build();