/* 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;
}
}
};
// Print the list
for (MyClass e : list) {
}
}
}
class MyClass implements Comparable<MyClass> {
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);
}
return "MyClass(" + this.aString + ")";
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lIHsKCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgTGlzdDxNeUNsYXNzPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KEFycmF5cy5hc0xpc3QoCiAgICAgICAgICAgIG5ldyBNeUNsYXNzKCJXYWxkIiksCiAgICAgICAgICAgIG5ldyBNeUNsYXNzKCJBcmN0aWMiKSwKICAgICAgICAgICAgbmV3IE15Q2xhc3MoIkhpIiksCiAgICAgICAgICAgIG5ldyBNeUNsYXNzKCJTa2lwIiksCiAgICAgICAgICAgIG5ldyBNeUNsYXNzKCIgWnVsdSIpCiAgICAgICAgKSk7CgogICAgICAgIENvbXBhcmF0b3I8TXlDbGFzcz4gbXlSdWxlcyA9IG5ldyBDb21wYXJhdG9yPE15Q2xhc3M+KCkgewoKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShNeUNsYXNzIG8xLCBNeUNsYXNzIG8yKSB7CiAgICAgICAgICAgICAgICBpbnQgb3JkZXIgPSBnZXRPcmRlcihvMSkgLSBnZXRPcmRlcihvMik7CiAgICAgICAgICAgICAgICByZXR1cm4gKG9yZGVyICE9IDAgPyBvcmRlciA6IG8xLmFTdHJpbmcuY29tcGFyZVRvKG8yLmFTdHJpbmcpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpdmF0ZSBpbnQgZ2V0T3JkZXIoTXlDbGFzcyBtKSB7CiAgICAgICAgICAgICAgICBpZiAobS5hU3RyaW5nLnN0YXJ0c1dpdGgoIiAiKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAobS5hU3RyaW5nLmVxdWFscygiSGkiKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGxpc3QsIG15UnVsZXMpOwoKICAgICAgICAvLyBQcmludCB0aGUgbGlzdAogICAgICAgIGZvciAoTXlDbGFzcyBlIDogbGlzdCkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CiAgICAgICAgfQogICAgfQp9CgpjbGFzcyBNeUNsYXNzIGltcGxlbWVudHMgQ29tcGFyYWJsZTxNeUNsYXNzPiB7CgogICAgU3RyaW5nIGFTdHJpbmc7CgogICAgTXlDbGFzcyhTdHJpbmcgYVN0cmluZykgewogICAgICAgIHRoaXMuYVN0cmluZyA9IGFTdHJpbmc7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhNeUNsYXNzIG90aGVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYVN0cmluZy5jb21wYXJlVG8ob3RoZXIuYVN0cmluZyk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKICAgICAgICBpZiAobyA9PSBudWxsIHx8ICFnZXRDbGFzcygpLmVxdWFscyhvLmdldENsYXNzKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIE9iamVjdHMuZXF1YWxzKHRoaXMuYVN0cmluZywgKChNeUNsYXNzKSBvKS5hU3RyaW5nKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgcmV0dXJuIDM3ICsgT2JqZWN0cy5oYXNoQ29kZSh0aGlzLmFTdHJpbmcpOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuICJNeUNsYXNzKCIgKyB0aGlzLmFTdHJpbmcgKyAiKSI7CiAgICB9Cn0=