Index.java
package com.test.coll;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Random;
public class Index {
public static void main(String[] args) {
System.out.println("---------排序前---------");
ArrayList<HashMap<String, String>> al = Index.getRondomData();
for (HashMap<String, String> hm : al) {
System.out.println(hm.get("key") + ":" + hm.get("value"));
}
System.out.println("---------排序後---------");
Collections.sort(al, new MySort(false, true, "key"));
for (HashMap<String, String> hm : al) {
System.out.println(hm.get("key") + ":" + hm.get("value"));
}
}
public static ArrayList<HashMap<String, String>> getRondomData() {
ArrayList<HashMap<String, String>> al = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < 10; i++) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("key", (new Random()).nextInt(100) + "");
hm.put("value", (new Random()).nextInt(100) + "");
al.add(hm);
}
return al;
}
}
MySort.java
package com.test.coll;
import java.util.Comparator;
import java.util.HashMap;
public class MySort implements Comparator<HashMap<String, String>> {
private boolean isAsc; // 是否為升序,true:升序,false:降序
private boolean isNum; // 排序value是否為數值型
private String key; // 根據哪個key排序
public MySort(boolean isAsc, boolean isNum, String key) {
this.isAsc = isAsc;
this.isNum = isNum;
this.key = key;
}
@Override
public int compare(HashMap<String, String> hashMap1,
HashMap<String, String> hashMap2) {
String v1 = hashMap1.get(this.key);
String v2 = hashMap2.get(this.key);
if (!isNum) {
return isAsc ? (v1.compareTo(v2)) : (v2.compareTo(v1));
} else {
if (Double.parseDouble(v1) > Double.parseDouble(v2)) {
return isAsc ? 1 : -1;
}else if(Double.parseDouble(v1) < Double.parseDouble(v2)) {
return isAsc ? -1 : 1;
}else {
return 0;
}
}
}
}