【发布时间】:2012-08-24 10:38:56
【问题描述】:
鉴于 LinkedHashMap 包含字符串和整数,我如何根据其值对 LinkedHashMap 进行排序。所以我需要根据整数值对其进行排序。 非常感谢
【问题讨论】:
-
你必须使用 LinkedHashMap 吗? TreeMap 可能有帮助?
-
哦。我知道了。懒得看cmets。 ^_^
标签: java linkedhashmap
鉴于 LinkedHashMap 包含字符串和整数,我如何根据其值对 LinkedHashMap 进行排序。所以我需要根据整数值对其进行排序。 非常感谢
【问题讨论】:
标签: java linkedhashmap
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.SortedMap;
import java.util.TreeMap;
public class HashMapTest {
public static void main(String[] args) {
Map<String, Integer> map=new LinkedHashMap<String, Integer>();
map.put("a", 11);
map.put("B", 12);
map.put("c", 3);
map.put("d", 4);
map.put("e", 5);
map.put("f", 6);
map.put("g", 7);
map.put("h", 8);
map.put("i", 9);
map.put("j", 3);
map.put("k", 2);
map.put("l", 1);
List<Map.Entry<String, Integer>> entries = new
ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(entries,new CustomizedHashMap());
Map<String, Integer> sortedMap = new LinkedHashMap<String,
Integer>();
for (Map.Entry<String, Integer> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
System.out.print( sortedMap.put(entry.getKey(),
entry.getValue())+" ");
}
}
}
class CustomizedHashMap implements Comparator<Map.Entry<String, Integer>> {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
// TODO Auto-generated method stub
return -o1.getValue().compareTo(o2.getValue());
}
}
【讨论】:
现在使用 Java 8 流更容易了:您不需要中间映射来排序:
map.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.forEach(entry -> ... );
【讨论】:
List<Map.Entry<String, Integer>> entries =
new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> a, Map.Entry<String, Integer> b){
return a.getValue().compareTo(b.getValue());
}
});
Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>();
for (Map.Entry<String, Integer> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
}
【讨论】:
Collections.reverseOrder(comparator),意思更明显。
LinkedHashMap 只是维护插入顺序。如果要按值排序,可能需要自己写comparator。
【讨论】:
Map.Entry.comparingByValue() 应该为您生成一个。并且可以通过Collections.reverseOrder(Map.Entry.comparingByValue())反转。
Comparable,要么提供客户 Comparator 到 Map.Entry.comparingByValue。