我有一张地图,我想根据一些规则对其内容进行排序:
- 根据其值而不是其键按字母顺序(从 A 到 Z)对地图进行排序。
- 排序时忽略值的大小写敏感性。
- 考虑重复的单词(具有精确字母拼写和大小写的单词)。
- 将字母数字单词正确排序(Cbc2ee应该出现在Cbc100ee之前)。
- 处理非英文单词(área应该出现在以“a”字母开头的单词中,但实际上它出现在以“z”字母开头的单词之后,考虑 á 另一个字母)。
我想我想要的都是合乎逻辑的。我能够通过以下代码完成第 1、2 和 3 点:
public <K, V extends Comparable<? super V>> LinkedHashMap<K, V> sortMapByValues( Map<K, V> map ) {
SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<Map.Entry<K, V>>(
new Comparator<Map.Entry<K, V>>() {
@Override
public int compare( Map.Entry<K, V> e1, Map.Entry<K, V> e2 ) {
String a = (String)e1.getValue();
String b = (String)e2.getValue();
int diff = a.compareToIgnoreCase( b );
if (diff == 0)
diff = a.compareTo(b);
return diff != 0 ? diff : 1; // Special fix to preserve words with similar spelling.
}
}
);
sortedEntries.addAll( map.entrySet() );
LinkedHashMap<K, V> sortedMap = new LinkedHashMap<K, V>();
for( Map.Entry<K, V> sortedEntry : sortedEntries )
sortedMap.put( sortedEntry.getKey(), sortedEntry.getValue() );
return sortedMap;
}
第 (4) 点我找到了它的脚本,但我无法将它与我的代码合并: http ://www.davekoelle.com/alphanum.html
第 (5) 点我也找到了它的脚本,但我无法将它与我的代码合并: http ://www.javapractices.com/topic/TopicAction.do?Id=207
因为这些点会影响 compare(...) 方法。 任何人都可以帮助我吗?