Java:根据匹配的字符串/模式对数组进行排序

Shr*_*ave 6 java sorting string collections comparator

我需要对一个数组进行排序,其中匹配的项目会出现,而其他项目会出现故障.

对于Ex.我有一个数组:[z,asxdf,abasdf,abcasdf,b,bc,bcd,c] 我需要的是当我传递KeyWord假设"b"时,它应该对给定的数组进行排序,其中所有的字符串都以b ..将首先出现,之后是其余的.这将产生最终输出:[b,bc,bcd,z,c,..(休息).]

如果可以在Java中使用比较器?

String keyWord = "b";
String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
Arrays.sort(s, new Comparator<String>() {

    @Override
    public int compare(String o1, String o2) {

            //Code to sort array according to need

    }
});
System.out.println(Arrays.toString(s));
Run Code Online (Sandbox Code Playgroud)

Result -> [ b , bc , bcd , z , c , ...]

(我可以使用List而不是Array,或任何其他如果它可以帮我解决这个问题)

mor*_*ano 10

回答是否可以使用Comparator进行的问题,答案是肯定的:你只需要创建一个新的Comparator类而不是创建一个匿名的Comparator,如下所示:

    class MyComparator implements Comparator<String> {

        private final String keyWord;

        MyComparator(String keyWord) {
            this.keyWord = keyWord;
        }

        @Override
        public int compare(String o1, String o2) {

            if(o1.startsWith(keyWord)) {
                return o2.startsWith(keyWord)? o1.compareTo(o2): -1;
            } else {
                return o2.startsWith(keyWord)? 1: o1.compareTo(o2); 
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后在代码中使用该比较器:

    String keyWord = "b";
    String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
    Arrays.sort(s, new MyComparator(keyWord));
    System.out.println(Arrays.toString(s));
Run Code Online (Sandbox Code Playgroud)