/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Comparator;
class ComplexComparator implements Comparator<Book> {
private Comparator<Book> comp;
public ComplexComparator(Comparator<Book> x, Comparator<Book> y) {
comp = x.thenComparing(y);
}
public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i) {
if (h && i) {
comp = x.thenComparing(y);
} else if (h) {
comp = x.thenComparing(y.reversed());
} else if (i) {
comp = x.reversed().thenComparing(y);
} else {
comp = x.reversed().thenComparing(y.reversed());
}
}
public static void main
(String[] args
) {
ComplexComparator c1 = new ComplexComparator(page, title);
ComplexComparator c2 = new ComplexComparator(page, false, title, true);
ComplexComparator c3 = new ComplexComparator(aver, false, title, true);
System.
out.
println(c1.
compare(b1, b2
)); // -1, page only System.
out.
println(c2.
compare(b1, b2
)); // 1, page only reversed System.
out.
println(c3.
compare(b1, b2
)); // 0, same page&title }
@Override
return comp.compare(o1, o2);
}
}
int pageNb;
int average;
public Book(int pageNb,
String title,
int average
) { this.pageNb = pageNb;
this.title = title;
this.average = average;
}
public int getPageNb() { return pageNb; }
public String getTitle
() { return title
; } public int getAverage() { return average; }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CgpjbGFzcyBDb21wbGV4Q29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8Qm9vaz4gewoKICAgIHByaXZhdGUgQ29tcGFyYXRvcjxCb29rPiBjb21wOwoKICAgIHB1YmxpYyBDb21wbGV4Q29tcGFyYXRvcihDb21wYXJhdG9yPEJvb2s+IHgsIENvbXBhcmF0b3I8Qm9vaz4geSkgewogICAgICAgIGNvbXAgPSB4LnRoZW5Db21wYXJpbmcoeSk7CiAgICB9CgogICAgcHVibGljIENvbXBsZXhDb21wYXJhdG9yKENvbXBhcmF0b3I8Qm9vaz4geCwgYm9vbGVhbiBoLCBDb21wYXJhdG9yPEJvb2s+IHksIGJvb2xlYW4gaSkgewogICAgICAgIGlmIChoICYmIGkpIHsKICAgICAgICAgICAgY29tcCA9IHgudGhlbkNvbXBhcmluZyh5KTsKICAgICAgICB9IGVsc2UgaWYgKGgpIHsKICAgICAgICAgICAgY29tcCA9IHgudGhlbkNvbXBhcmluZyh5LnJldmVyc2VkKCkpOwogICAgICAgIH0gZWxzZSBpZiAoaSkgewogICAgICAgICAgICBjb21wID0geC5yZXZlcnNlZCgpLnRoZW5Db21wYXJpbmcoeSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29tcCA9IHgucmV2ZXJzZWQoKS50aGVuQ29tcGFyaW5nKHkucmV2ZXJzZWQoKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBDb21wYXJhdG9yPEJvb2s+IHBhZ2UgPSBDb21wYXJhdG9yLmNvbXBhcmluZyhCb29rOjpnZXRQYWdlTmIpOwogICAgICAgIENvbXBhcmF0b3I8Qm9vaz4gdGl0bGUgPSBDb21wYXJhdG9yLmNvbXBhcmluZyhCb29rOjpnZXRUaXRsZSk7CiAgICAgICAgQ29tcGFyYXRvcjxCb29rPiBhdmVyID0gQ29tcGFyYXRvci5jb21wYXJpbmcoQm9vazo6Z2V0QXZlcmFnZSk7CgogICAgICAgIENvbXBsZXhDb21wYXJhdG9yIGMxID0gbmV3IENvbXBsZXhDb21wYXJhdG9yKHBhZ2UsIHRpdGxlKTsKICAgICAgICBDb21wbGV4Q29tcGFyYXRvciBjMiA9IG5ldyBDb21wbGV4Q29tcGFyYXRvcihwYWdlLCBmYWxzZSwgdGl0bGUsIHRydWUpOwogICAgICAgIENvbXBsZXhDb21wYXJhdG9yIGMzID0gbmV3IENvbXBsZXhDb21wYXJhdG9yKGF2ZXIsIGZhbHNlLCB0aXRsZSwgdHJ1ZSk7CgogICAgICAgIEJvb2sgYjEgPSBuZXcgQm9vayg1LCAiYWJjIiwgMTApOwogICAgICAgIEJvb2sgYjIgPSBuZXcgQm9vaygxMCwgImFiYyIsIDEwKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYzEuY29tcGFyZShiMSwgYjIpKTsgLy8gLTEsIHBhZ2Ugb25seQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjMi5jb21wYXJlKGIxLCBiMikpOyAvLyAgMSwgcGFnZSBvbmx5IHJldmVyc2VkCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGMzLmNvbXBhcmUoYjEsIGIyKSk7IC8vICAwLCBzYW1lIHBhZ2UmdGl0bGUKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBpbnQgY29tcGFyZShCb29rIG8xLCBCb29rIG8yKSB7CiAgICAgICAgcmV0dXJuIGNvbXAuY29tcGFyZShvMSwgbzIpOwogICAgfQp9CgpjbGFzcyBCb29rIHsKICAgIGludCBwYWdlTmI7CiAgICBTdHJpbmcgdGl0bGU7CiAgICBpbnQgYXZlcmFnZTsKCiAgICBwdWJsaWMgQm9vayhpbnQgcGFnZU5iLCBTdHJpbmcgdGl0bGUsIGludCBhdmVyYWdlKSB7CiAgICAgICAgdGhpcy5wYWdlTmIgPSBwYWdlTmI7CiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwogICAgICAgIHRoaXMuYXZlcmFnZSA9IGF2ZXJhZ2U7CiAgICB9CgogICAgcHVibGljIGludCBnZXRQYWdlTmIoKSB7IHJldHVybiBwYWdlTmI7ICB9CiAgICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgeyByZXR1cm4gdGl0bGU7ICB9CiAgICBwdWJsaWMgaW50IGdldEF2ZXJhZ2UoKSB7IHJldHVybiBhdmVyYWdlOyAgfQp9