如何在具有相似值的java中对multimap进行排序

时间:2016-01-25 09:49:46

标签: java sorting hashmap guava multimap

大家好,我是Java的初学者。

我创建了一个包含以下数据的多图,我想以特定的方式对多图进行排序。

basket1                             apple_green
basket100                           apple_red
basket1                             mango_red
basket2                             mango_green

我想根据值中的相似性对上面的多图进行排序。 值中的字符串可以是任何东西,因此代码必须能够找到相似性并将它们分组才能收集。 像这样的东西。

<?php
$con = mysql_connect("localhost", "root","");
if(!$con){
    die('Could not connect:' .mysql_error());
}
mysql_select_db('carrental', $con);?>

3 个答案:

答案 0 :(得分:2)

您的确切排序要求不清楚,但很明显您希望主要按值排序。正如其他人所指出的那样,这不是Map(或Multimap)的设计,因为它们是面向关键的数据结构。

但是,您可以使用Multimap.entries()

访问键值对
Collection<Map.Entry<KeyType, ValueType>> entries = multimap.entries();

KeyTypeValueType只是类型变量,因为您没有在问题中指明它们 - 也许它们只是String

然后,您可以使用Comparator<Map.Entry<KeyType, ValueType>>对这些进行排序,或者,因为您使用的是番石榴,Ordering<Map.Entry<KeyType, ValueType>>

List<Map.Entry<KeyType, ValueType>> sortedEntries =
    new Ordering<Map.Entry<KeyType, ValueType>>() {
      @Override public int compare(
          Map.Entry<KeyType, ValueType> left,
          Map.Entry<KeyType, ValueType> right) {
        // You might want to tweak the logic here to make the
        // comparison more stable in the face of equal values.
        return left.getValue().compareTo(right.getValue());
      }
    }.sortedCopy(entries);

答案 1 :(得分:0)

Map是基于密钥的存储。值不会也不会影响地图中的搜索方式。如果您只需要确保迭代顺序,那么使用key-&gt;值对的向量并根据需要对它们进行排序。没有其他方法可以有效地实现您想要的东西。

答案 2 :(得分:0)

如上所述,地图无法按字母顺序排序。即使您按照您想要的顺序将条目放入其中,也不能保证它将以此顺序存储在地图中。

无论如何,一种对条目进行排序并按照您想要的方式迭代它们的方法如下:

HashMap<String, List<String>> map = new HashMap<String, List<String>>();

   for(List<String> list : map.values()) {
       Collections.sort(list);
   }

   SortedSet<String> keys = new TreeSet<String>(map.keySet());
   for (String key : keys) { 
      System.out.println(key + " -> " + map.get(key));
   }

前3行对存储桶的内容进行排序,以下行对存储桶进行排序。