import java.util.*;
import java.util.stream.Collectors;
public class StephenJavaLiveTemplateDemo {
public static void main(String[] args) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap();
map1.put("k1", "8");
list.add(map1);
Map<String, Object> map2 = new HashMap();
map2.put("k1", "6");
list.add(map2);
//1.8 之前排序寫法
Collections.sort(list, new Comparator<Map>() {
@Override
public int compare(Map o1, Map o2) {
int ret = 0;
//如果前者小於、等於或者大於後者,則分別返回-1/0/1;降序用o2.compareTo(o1)
ret = o1.get("k1").toString().compareTo(o2.get("k1").toString());
return ret;
}
});
print(list);
//1.8 排序寫法一:Lambda 表達式
Collections.sort(list, (o1, o2) -> {
int ret = 0;
ret = o1.get("k1").toString().compareTo(o2.get("k1").toString());
return ret;
});
//1.8 排序寫法二: stream + Lambda 表達式
// 升序
list = list.stream().sorted(Comparator.comparing(StephenJavaLiveTemplateDemo::sort2)).collect(Collectors.toList());
print(list);
// 降序
list = list.stream().sorted(Comparator.comparing(StephenJavaLiveTemplateDemo::sort2).reversed()).collect(Collectors.toList());
print(list);
}
private static String sort2(Map<String, Object> a) {
return (String) a.get("k1");
}
private static void print(List<Map<String, Object>> list) {
list.stream().forEach(x -> {
System.out.println(x.get("k1"));
});
System.out.println("_____________");
}
}
輸出:
6
8
_____________
6
8
_____________
8
6
_____________