大家好,我是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);?>
答案 0 :(得分:2)
您的确切排序要求不清楚,但很明显您希望主要按值排序。正如其他人所指出的那样,这不是Map
(或Multimap
)的设计,因为它们是面向关键的数据结构。
但是,您可以使用Multimap.entries()
Collection<Map.Entry<KeyType, ValueType>> entries = multimap.entries();
(KeyType
和ValueType
只是类型变量,因为您没有在问题中指明它们 - 也许它们只是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行对存储桶的内容进行排序,以下行对存储桶进行排序。