我需要根据存储在其中的值对HashMap
进行排序。HashMap
包含存储在电话中的联系人姓名。
此外,我还需要键在我对值进行排序时立即自动排序,或者您可以说键和值绑定在一起,因此值的任何更改都应该反映在键中。
HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"froyo");
map.put(2,"abby");
map.put(3,"denver");
map.put(4,"frost");
map.put(5,"daisy");
所需输出:
2,abby;
5,daisy;
3,denver;
4,frost;
1,froyo;
发布于 2011-11-14 17:18:24
假设使用Java,您可以像这样对hashmap进行排序:
public LinkedHashMap<Integer, String> sortHashMapByValues(
HashMap<Integer, String> passedMap) {
List<Integer> mapKeys = new ArrayList<>(passedMap.keySet());
List<String> mapValues = new ArrayList<>(passedMap.values());
Collections.sort(mapValues);
Collections.sort(mapKeys);
LinkedHashMap<Integer, String> sortedMap =
new LinkedHashMap<>();
Iterator<String> valueIt = mapValues.iterator();
while (valueIt.hasNext()) {
String val = valueIt.next();
Iterator<Integer> keyIt = mapKeys.iterator();
while (keyIt.hasNext()) {
Integer key = keyIt.next();
String comp1 = passedMap.get(key);
String comp2 = val;
if (comp1.equals(comp2)) {
keyIt.remove();
sortedMap.put(key, val);
break;
}
}
}
return sortedMap;
}
这只是一个启动示例。这种方法更有用,因为它对HashMap进行排序并保留重复的值。
发布于 2013-10-30 08:48:03
在Java 8中:
Map<Integer, String> sortedMap =
unsortedMap.entrySet().stream()
.sorted(Entry.comparingByValue())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));
发布于 2015-11-06 03:01:05
map.entrySet().stream()
.sorted((k1, k2) -> -k1.getValue().compareTo(k2.getValue()))
.forEach(k -> System.out.println(k.getKey() + ": " + k.getValue()));
https://stackoverflow.com/questions/8119366
复制相似问题