List<String> 排序问题,如何排序中文字符(大中小)

List list= new ArrayList();{{
list.add(“其他类型企业”);
list.add(“中型企业”);
list.add(“小型企业”);
list.add(“大型企业”);
list.add(“新型企业”);
}}
// 大型,中型,小型,在前其他的sort排序即可。
// Collections.sort(list);
System.out.println(list.toString());

如上所示,list排序后要求大中小型优先排序,其后的顺序按照sort排序即可。
诸位有没有简单的实现?
如果没有,在下只能(遍历list,然后再拆分成两个list,再组合成一个)。

自己实现Comparator 接口。

HashMap<String,Integer> sortMap=new HashMap<>(3);
sortMap.put(“大型”,1);
sortMap.put(“中型”,2);
sortMap.put(“小型”,3);

    list.sort((o1, o2) -> {
        String o1Str=o1.substring(0,2);
        String o2Str=o2.substring(0,2);
        Integer sort1=sortMap.get(o1Str);
        Integer sort2=sortMap.get(o2Str);
        if(sort1!=null && sort2!=null ){
            return Integer.compare(sort1,sort2);
        }else{
            if(sort1!=null){
                return -1;
            }else if(sort2!=null){
                return 1;
            }else{
                return o1.compareTo(o2);
            }
        }
    });

PC哥名不虚传

假装回答

package com.pay;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

public class MySort {

    public static void main(String[] args) {
        List list = new ArrayList();
        {
            {
                list.add("其他类型企业");
                list.add("中型企业");
                list.add("小型企业");
                list.add("大型企业");
                list.add("新型企业");
            }
        }

        System.out.println("原数据:");
        System.out.println(list + "\n");

        System.out.println("排序处理后:");
        System.out.println(sort(list));
    }

    public static List<String> sort(List<String> list) {
        // 大型,中型,小型,在前其他的sort排序即可。
        final HashMap<String, Integer> sortMap = new HashMap<String, Integer>(3);
        sortMap.put("大型", 1);
        sortMap.put("中型", 2);
        sortMap.put("小型", 3);

        Collections.sort(list, new Comparator() {
            public int compare(Object o1, Object o2) {
                String string1 = o1.toString().substring(0, 2);
                String string2 = o2.toString().substring(0, 2);
                Integer sort1 = sortMap.get(string1);
                Integer sort2 = sortMap.get(string2);
                if (sort1 != null && sort2 != null) {
                    return Integer.compare(sort1, sort2);
                } else {
                    if (sort1 != null) {
                        return -1;
                    } else if (sort2 != null) {
                        return 1;
                    } else {
                        return 0;
                    }
                }
            }
        });
        return list;
    }
}

运行结果

原数据:
[其他类型企业, 中型企业, 小型企业, 大型企业, 新型企业]

处理后
[大型企业, 中型企业, 小型企业, 其他类型企业, 新型企业]

静哥牛逼


    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        {
            {
                list.add("其他类型企业");
                list.add("中型企业");
                list.add("小型企业");
                list.add("大型企业");
                list.add("新型企业");
            }
        }

        System.out.println("原数据:");
        System.out.println(list + "\n");

        System.out.println("排序处理后:");
        System.out.println(sort(list));
    }

    public static List<String> sort(List<String> list) {
        // 大型,中型,小型,在前其他的sort排序即可。
        final HashMap<String, Integer> sortMap = new HashMap<String, Integer>(3);
        sortMap.put("大", 1);
        sortMap.put("中", 2);
        sortMap.put("小", 3);
        Collections.sort(list, new Comparator<String>() {
            public int compare(String s1, String s2) {
            	int n1 = s1.length();
        		int n2 = s2.length();
        		int min = Math.min(n1, n2);
        		for (int i = 0; i < min; i++) {
        			char c1 = s1.charAt(i);
        			char c2 = s2.charAt(i);
        			if (c1 != c2) {
        				Integer sort1 = sortMap.get(String.valueOf(c1));
                        Integer sort2 = sortMap.get(String.valueOf(c2));
                        if(sort1 ==null || sort2==null) {
                        	continue;
                        }
        				return sort1 - sort2;
        			}
        		}
        		return n1 - n2;
            }
        });
        return list;
    }
}