/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone {

	public static void main(String[] args) {
        List<MyClass> list = new ArrayList<>(Arrays.asList(
            new MyClass("Wald"),
            new MyClass("Arctic"),
            new MyClass("Hi"),
            new MyClass("Skip"),
            new MyClass(" Zulu")
        ));

        Comparator<MyClass> myRules = new Comparator<MyClass>() {

            @Override
            public int compare(MyClass o1, MyClass o2) {
                int order = getOrder(o1) - getOrder(o2);
                return (order != 0 ? order : o1.aString.compareTo(o2.aString));
            }

            private int getOrder(MyClass m) {
                if (m.aString.startsWith(" ")) {
                    return 0;
                }
                else if (m.aString.equals("Hi")) {
                    return 1;
                }
                else {
                    return 2;
                }
            }
        };

        Collections.sort(list, myRules);

        // Print the list
        for (MyClass e : list) {
            System.out.println(e);
        }
    }
}

class MyClass implements Comparable<MyClass> {

    String aString;

    MyClass(String aString) {
        this.aString = aString;
    }

    @Override
    public int compareTo(MyClass other) {
        return this.aString.compareTo(other.aString);
    }

    @Override
    public boolean equals(Object o) {
        if (o == null || !getClass().equals(o.getClass())) {
            return false;
        }
        return Objects.equals(this.aString, ((MyClass) o).aString);
    }

    @Override
    public int hashCode() {
        return 37 + Objects.hashCode(this.aString);
    }

    public String toString() {
        return "MyClass(" + this.aString + ")";
    }
}