Сортировать список строк в предопределенном порядке

У меня есть этот проект, в котором программа спрашивает пользователя, сколько раз он должен работать. Во время каждого запуска создается список и добавляются элементы. Эти элементы в массиве отсортированы не по алфавиту, а в следующем порядке:

q,w,e,r,t,y,u,i,o,p,l,k,j,h,g,f,d,s,a,z,x,c,v,b,n,m

Я могу запустить свою программу до того момента, когда она примет ввод, но я не знаю, что делать дальше ...

Пример ввода

2

3
what
are
you

2
sad
set

Пример вывода

what
you
are

set
sad

Вот мой код:

import java.util.*;


public class WeirdWritings {

    public static void main(String[] args) {
        int data,word,ctr,i,ii;
        char[] rLetter = {'Q','W','E','R','T','Y','U','I','O','P','L','K','J','H','G','F','D','S','A','Z','X','C','V','B','N','M'};
        String entry;

        Scanner s = new Scanner(System.in);

        data=s.nextInt();
        for (ctr=0;ctr<rLetter.length;ctr++)
            System.out.print(rLetter[ctr]);
        System.out.println();

        for (ii = 0; ii<data; ii++) {
            word=s.nextInt();
            List<String> array_ii = new ArrayList<String>();
            for(i=0; i<word; i++) {
                entry=s.next();
                array_ii.add(entry);
            }
        }

    }
}

добавив к нему компаратор, чтобы закончить

открытый класс MyComparator реализует Comparator {

private int[] charRank;

public MyComparator() {
    char[] charOrder = {'Q','W','E','R','T','Y','U','I','O','P','L','K','J','H','G','F','D','S','A','Z','X','C','V','B','N','M'};
    this.charRank = new int[26];
    for(int i=0; i<25; i++) {
        this.charRank[charToInt(charOrder[i])] = i; 
    }
}

public int compare(String s1, String s2) {
    // returns
    // Positive integer if s1 greater than s2
    // 0 if s1 = s2
    // Negative integer if s1 smaller than s2
    s1 = s1.toUpperCase();
    s2 = s2.toUpperCase();
    int l = Math.min(s1.length(), s2.length());
    int charComp;
    for(int i=0; i<l; i++) {
        charComp = this.charRank[charToInt(s1.charAt(i))] - charRank[charToInt(s2.charAt(i))];
        if(charComp != 0)
            return charComp;
    }
    return s1.length() - s2.length();
}

//works for c between 'A' and 'Z' - upper case letters
private static int charToInt(char c) {
    return c - 65;
}

//works for 0<=i<=25
private static char intToChar(int i) {
    return (char) (i + 65);
}

public static void main(String[] args) {
    int data,word,ctr,i,ii;
    char[] rLetter = {'Q','W','E','R','T','Y','U','I','O','P','L','K','J','H','G','F','D','S','A','Z','X','C','V','B','N','M'};
    String entry;

    Scanner s = new Scanner(System.in);

    data=s.nextInt();
    for (ctr=0;ctr<rLetter.length;ctr++)
        System.out.print(rLetter[ctr]);
    System.out.println();

    for (ii = 0; ii<data; ii++) {
        word=s.nextInt();
        String[] array_ii = new String[word];
        for(i=0; i<word; i++) {
            entry=s.next();
            array_ii[i]=(entry);
        }
        Arrays.sort(array_ii, new MyComparator());
        for(i=0; i<word; i++) {
            System.out.println(array_ii[i]);
        }
    }



}

}

Ответы на вопрос(1)

Ваш ответ на вопрос