- Collections.sort(集合)排序
/*直接按值的大小排序*/
public static void main(String[] args) {
List<Integer> nums = new ArrayList<Integer>();
nums.add(100);
nums.add(8);
nums.add(6);
nums.add(10);
System.out.println("排序前:"+nums);
Collections.sort(nums);
System.out.println("排序后:"+nums);
}
输出为:
排序前:[100, 8, 6, 10]
排序后:[6, 8, 10, 100]
- List<Map<String, Object>>某个key值的大小排序
public static void main(String[] args) {
List<Map<String, Object>> arrayList2 = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
Map<String, Object> map3 = new HashMap<String, Object>();
map1.put("aa", -1.1);
map2.put("aa", 2.2);
map3.put("aa", -3.2);
map1.put("bb", -10);
map2.put("bb", 2);
map3.put("bb", -6.6);
arrayList2.add(map1);
arrayList2.add(map2);
arrayList2.add(map3);
sortTableDataByKeyName(arrayList2,"bb");
for(int a = 0 ; a<arrayList2.size();a++) {
System.out.println("aa:"+arrayList2.get(a).get("aa")+" bb:"+arrayList2.get(a).get("bb"));
}
}
public static void sortTableDataByKeyName(List<Map<String,Object>> marketUnitList,final String KeyName){
Collections.sort(marketUnitList,new Comparator<Map<String,Object>>(){
@Override
public int compare(Map<String, Object> o1,Map<String, Object> o2) {
if(!"".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
return 0;
}else if("".equals(o1.get(KeyName)) && !"".equals(o2.get(KeyName))){
return 0;
}else if("".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
return 0;
}else{
BigDecimal o1B = new BigDecimal(o1.get(KeyName).toString());
BigDecimal o2B = new BigDecimal(o2.get(KeyName).toString());
Double o1I = o1B.doubleValue();
Double o2I = o2B.doubleValue();
return o2I.compareTo(o1I);
}
}
});
}
输出为:
aa:2.2 bb:2
aa:-3.2 bb:-6.6
aa:-1.1 bb:-10
- List<Map<String, Object>>中某个key值的绝对值排序
public static void main(String[] args) {
List<Map<String, Object>> arrayList1 = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> arrayList2 = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
Map<String, Object> map3 = new HashMap<String, Object>();
map1.put("aa", -1.1);
map2.put("aa", 2.2);
map3.put("aa", -3.342);
map1.put("bb", -10.909);
map2.put("bb", 9.22);
map3.put("bb", -60.6789);
arrayList1.add(map1);
arrayList1.add(map2);
arrayList1.add(map3);
for(int a= 0 ; a<arrayList1.size();a++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("aa", arrayList1.get(a).get("aa"));
if(arrayList1.get(a).get("bb")==null){
map.put("bb",arrayList1.get(a).get("bb"));
}else {
map.put("bb", Double.valueOf(arrayList1.get(a).get("bb").toString()));
}
arrayList2.add(map);
}
sortTableDataByKeyName(arrayList1,"bb");
for(int a = 0 ; a<arrayList1.size();a++) {
System.out.println("aa:"+arrayList1.get(a).get("aa")+" bb:"+arrayList1.get(a).get("bb"));
}
}
public static void sortTableDataByKeyName(List<Map<String,Object>> marketUnitList,final String KeyName){
Collections.sort(marketUnitList,new Comparator<Map<String,Object>>(){
@Override
public int compare(Map<String, Object> o1,Map<String, Object> o2) {
if(o1.get(KeyName)==null||o2.get(KeyName)==null) {
return -1;
}
if(!"".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
return 0;
}else if("".equals(o1.get(KeyName)) && !"".equals(o2.get(KeyName))){
return 0;
}else if("".equals(o1.get(KeyName)) && "".equals(o2.get(KeyName))){
return 0;
}else{
BigDecimal o1B = new BigDecimal(o1.get(KeyName).toString());
BigDecimal o2B = new BigDecimal(o2.get(KeyName).toString());
Double o1I = Math.abs(o1B.doubleValue());
Double o2I = Math.abs(o2B.doubleValue());
return o2I.compareTo(o1I);
}
}
});
}
输出为:
aa:-3.342 bb:-60.6789
aa:-1.1 bb:-10.909
aa:2.2 bb:9.22
- 单属性list,自定义顺序排序
public static void main(String[] args) {
List<String> list = Arrays.asList("北京","上海","广州","北京","广州");
List<String> sortRule = Arrays.asList("北京","上海","广州");
System.out.println("原始数据:"+list);
System.out.println("排序规则:"+sortRule);
Collections.sort(list,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int a1 = sortRule.indexOf(o1);
int a2 = sortRule.indexOf(o2);
return a1-a2;
}
});
System.out.println("正序排列:"+list);
Collections.sort(list,new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
int a1 = sortRule.indexOf(o1);
int a2 = sortRule.indexOf(o2);
return a2 - a1 ;
}
});
System.out.println("倒序排列:"+list);
}
输出为:
原始数据:[北京, 上海, 广州, 北京, 广州]
排序规则:[北京, 上海, 广州]
正序排列:[北京, 北京, 上海, 广州, 广州]
倒序排列:[广州, 广州, 上海, 北京, 北京]
- 对象自定义多属性的顺序排序
public static void main(String[] args) {
List<Stu> stu = new ArrayList<>();
stu.add(new Stu("二逗",60,173,"浙大","北京"));
stu.add(new Stu("小豆",65,176,"郑大","郑州"));
stu.add(new Stu("二逗",63,174,"武大","上海"));
stu.add(new Stu("大豆",66,183,"北大","郑州"));
stu.add(new Stu("小豆",56,178,"交大","上海"));
stu.add(new Stu("小豆",58,175,"交大","上海"));
System.out.println("原始数据:");
for (Stu s : stu) {
System.out.println(s.getName()+" "+s.getWeight()+" "+s.getHeight()+" "+s.getSchool()+" "+s.getAddress());
}
System.out.println("先按照(大豆 二逗 小豆)排序,当名称相同时按照(北京 上海 郑州)排序,当名称和地区都相同时按照身高降序排序:");
List<String> nameOrder = Arrays.asList("大豆","二逗","小豆");
List<String> addressOrder = Arrays.asList("北京","上海","郑州");
Collections.sort(stu,new Comparator<Stu>() {
@Override
public int compare(Stu stu1, Stu stu2) {
if(stu1.getName().equals(stu2.getName())) {
if(stu1.getAddress().equals(stu2.getAddress())){
return stu2.getHeight()-stu2.getHeight();
}else {
int a1 = addressOrder.indexOf(stu1.getAddress());
int a2 = addressOrder.indexOf(stu2.getAddress());
return a1 - a2;
}
}else {
int a1 = nameOrder.indexOf(stu1.getName());
int a2 = nameOrder.indexOf(stu2.getName());
return a1 - a2;
}
}
});
for (Stu s : stu) {
System.out.println(s.getName()+" "+s.getWeight()+" "+s.getHeight()+" "+s.getSchool()+" "+s.getAddress());
}
}
输出为:
原始数据:
二逗 60 173 浙大 北京
小豆 65 176 郑大 郑州
二逗 63 174 武大 上海
大豆 66 183北大 郑州
小豆 56 178 交大 上海
小豆 58 175 交大 上海
先按照(大豆 二逗 小豆)排序,当名称相同时按照(北京 上海 郑州)排序,当名称和地区都相同时按照身高降序排序:
大豆 66 183 北大 郑州
二逗 60 173 浙大 北京
二逗 63 174 武大 上海
小豆 56 178 交大 上海
小豆 58 175 交大 上海
小豆 65 176 郑大 郑州