【问题标题】:No SortedMultiMap in Guava?Guava中没有SortedMultiMap?
【发布时间】:2015-07-18 18:20:14
【问题描述】:

我正在尝试找到一种方法来获取已排序的多图。我检查了 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;

用英语:我需要一个映射,其中键是双精度对,引用值中包含的某些对象。该映射可以包含多个相同的键(发生相同的双数对),因此这需要是一个多映射或包。发生这种情况时,可以将元素插入到集合中,并且在选择顶部元素时,它应该返回其中之一(无论哪个都无所谓)。我需要集合是可变的,因为对于每次迭代,我都会选择较小的元素并将其从地图中删除。

【问题讨论】:

  • 您希望如何对多图进行排序?像 ArrayList?
  • 让我编辑我的帖子以提供更多详细信息
  • 请用英文更详细地说明您想要什么,这将有助于Java专家了解您的需求。

标签: java android guava android-guava


【解决方案1】:

您可能正在寻找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();

【讨论】:

  • 我还没有弄清楚如何构建一个按与此构造成对的键排序的多图。然而,一个很大的缺点是描述中的第一句话:“MultimapBuilder 实例是不可变的”。我需要为每次迭代删除第一个元素。每次复制集合会非常昂贵。
  • 不可变的是构建器本身,而不是构建的多图。要使用对,您只需将您的对类型的比较器传递给 treeKeys。
  • 您是否介意在您的回复中添加示例代码。我不太了解番石榴系列。
  • 这就是你要找的东西吗?
  • 你必须决定如何为给定的键收集多个值——在一个集合中,在一个列表中,等等。
猜你喜欢
  • 2014-12-16
  • 2012-01-17
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
相关资源
最近更新 更多