番石榴中没有 SortedMultiMap 吗?
No SortedMultiMap in Guava?
我正在尝试找到一种方法来获得排序的多图。我检查了 Guava,它提供了两个单独的集合数据结构,它们结合起来可以解决我的问题。值得注意的是,SortedSetMultimap 不能包含相同的键,因为它是一个 Set,而 Multimap 位于同一符号中。这是怎么回事?
编辑
在 C++ 中,我有类似的东西,希望它能告诉你我打算如何在 Java 中使用类似的功能:
struct KeyCompare : public binary_function<pair<double,double>, pair<double,double>, bool>
{
bool operator()(const pair<double,double>& p1, const pair<double,double>& p2) const;
};
multimap<pair<double,double>, Object*, KeyCompare> _list;
.../...
KeyCompare key_compare;
while (( ! _list.empty() && key_compare(_list.begin()->first, k))) {
u = _list.begin()->second;
v = _list.begin()->first;
英语:我需要一个地图,其中的键是引用值中包含的某些对象的双精度对。映射可以包含多个相同的键(会出现同一对双数),因此这需要是一个多映射或包。发生这种情况时,可以将该元素插入到集合中,并且在选择顶部元素时,它应该 return 其中之一(哪个都无关紧要)。我需要集合是可变的,因为对于每次迭代,我都会选择较小的元素并将其从地图中删除。
您可能在寻找 MultimapBuilder.treeKeys().arrayListValues().build()
吗?
如果您需要通过比较器,可能看起来像
MultimapBuilder.treeKeys(new Comparator<Pair<Double, Double>>() {
@Override public int compare(Pair<Double, Double> p1, Pair<Double, Double> p2) {
return ComparisonChain.start()
.compare(p1.first(), p2.first())
.compare(p1.second(), p2.second())
.result();
}
}).arrayListValues().build();
我正在尝试找到一种方法来获得排序的多图。我检查了 Guava,它提供了两个单独的集合数据结构,它们结合起来可以解决我的问题。值得注意的是,SortedSetMultimap 不能包含相同的键,因为它是一个 Set,而 Multimap 位于同一符号中。这是怎么回事?
编辑
在 C++ 中,我有类似的东西,希望它能告诉你我打算如何在 Java 中使用类似的功能:
struct KeyCompare : public binary_function<pair<double,double>, pair<double,double>, bool>
{
bool operator()(const pair<double,double>& p1, const pair<double,double>& p2) const;
};
multimap<pair<double,double>, Object*, KeyCompare> _list;
.../...
KeyCompare key_compare;
while (( ! _list.empty() && key_compare(_list.begin()->first, k))) {
u = _list.begin()->second;
v = _list.begin()->first;
英语:我需要一个地图,其中的键是引用值中包含的某些对象的双精度对。映射可以包含多个相同的键(会出现同一对双数),因此这需要是一个多映射或包。发生这种情况时,可以将该元素插入到集合中,并且在选择顶部元素时,它应该 return 其中之一(哪个都无关紧要)。我需要集合是可变的,因为对于每次迭代,我都会选择较小的元素并将其从地图中删除。
您可能在寻找 MultimapBuilder.treeKeys().arrayListValues().build()
吗?
如果您需要通过比较器,可能看起来像
MultimapBuilder.treeKeys(new Comparator<Pair<Double, Double>>() {
@Override public int compare(Pair<Double, Double> p1, Pair<Double, Double> p2) {
return ComparisonChain.start()
.compare(p1.first(), p2.first())
.compare(p1.second(), p2.second())
.result();
}
}).arrayListValues().build();