/* 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
{
static class Parent{
public String toString
() {return s
;} }
static class Child1 extends Parent{
}
static class Child2 extends Parent{
}
{
List
<Parent
> list
= Arrays.
asList( new Child1("1a"),
new Child2("2a"),
new Child1("1b"),
new Child2("2b"));
List
<Class
<? extends Parent
>> order
= Arrays.
asList(Child1.
class, Child2.
class);
System.
out.
println("before " + list
); list.sort(comparing(p -> order.indexOf(p.getClass())));
System.
out.
println("after " + list
);
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBzdGF0aWMgamF2YS51dGlsLkNvbXBhcmF0b3IuY29tcGFyaW5nOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CiAgICBzdGF0aWMgY2xhc3MgUGFyZW50ewogICAgICAgIGZpbmFsIFN0cmluZyBzOwogICAgICAgIFBhcmVudChTdHJpbmcgcykge3RoaXMucz1zO30KICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkge3JldHVybiBzO30KICAgIH0KICAgIAogICAgc3RhdGljIGNsYXNzIENoaWxkMSBleHRlbmRzIFBhcmVudHsKICAgICAgICBDaGlsZDEoU3RyaW5nIHMpIHtzdXBlcihzKTt9CiAgICB9CiAgICAKICAgIHN0YXRpYyBjbGFzcyBDaGlsZDIgZXh0ZW5kcyBQYXJlbnR7CiAgICAgICAgQ2hpbGQyKFN0cmluZyBzKSB7c3VwZXIocyk7fQogICAgfQogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCiAgICB7CiAgICAgICAgTGlzdDxQYXJlbnQ+IGxpc3QgPSBBcnJheXMuYXNMaXN0KAogICAgICAgICAgICBuZXcgQ2hpbGQxKCIxYSIpLAogICAgICAgICAgICBuZXcgQ2hpbGQyKCIyYSIpLCAKICAgICAgICAgICAgbmV3IENoaWxkMSgiMWIiKSwgCiAgICAgICAgICAgIG5ldyBDaGlsZDIoIjJiIikpOwogICAgICAgICAgICAKICAgICAgICBMaXN0PENsYXNzPD8gZXh0ZW5kcyBQYXJlbnQ+PiBvcmRlciA9IEFycmF5cy5hc0xpc3QoQ2hpbGQxLmNsYXNzLCBDaGlsZDIuY2xhc3MpOwogICAgICAgIAogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVmb3JlICIgKyBsaXN0KTsKICAgICAgICBsaXN0LnNvcnQoY29tcGFyaW5nKHAgLT4gb3JkZXIuaW5kZXhPZihwLmdldENsYXNzKCkpKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciAiICsgbGlzdCk7CiAgICAgICAgCiAgICAgICAgCiAgICB9Cn0K