主要是遇到浮点数中出现无意义的数时候的处理情况:
public static void main(String args[]) {
Map<String, Float> map = new HashMap<String, Float>();
map.put("a", 1073.8256f);
map.put("b", 16.360186f);
map.put("c", 803.6707f);
map.put("d", 1164.1406f);
map.put("e", Float.NaN); // Float.NaN表示无意义的浮点数
List<Map.Entry<String, Float>> mapid = new ArrayList<Map.Entry<String, Float>>(
map.entrySet());
// 排序前
for (int i = 0; i < mapid.size(); i++) {
String id = mapid.get(i).toString();
System.out.println(id);
}
System.out.println("");
// 排序
Collections.sort(mapid, new Comparator<Map.Entry<String, Float>>() {
public int compare(Map.Entry<String, Float> o1,
Map.Entry<String, Float> o2) {
float v1 = o1.getValue();
float v2 = o2.getValue();
if (String.valueOf(v1).equals("NaN"))
return 1;
if (String.valueOf(v2).equals("NaN"))
return -1;
if ((v1 - v2) > 0)
return -1;
if ((v1 - v2) < 0)
return 1;
return 0;
// return ((o2.getValue() - o1.getValue())>0 )? 1 : -1;
}
});
// 排序后
for (int i = 0; i < mapid.size(); i++) {
String id = mapid.get(i).toString();
System.out.println(id);
}
}
结果:
d=1164.1406
e=NaN
b=16.360186
c=803.6707
a=1073.8256
d=1164.1406
a=1073.8256
c=803.6707
b=16.360186
e=NaN