fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. import java.util.Comparator;
  8.  
  9. class ComplexComparator implements Comparator<Book> {
  10.  
  11. private Comparator<Book> comp;
  12.  
  13. public ComplexComparator(Comparator<Book> x, Comparator<Book> y) {
  14. comp = x.thenComparing(y);
  15. }
  16.  
  17. public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i) {
  18. if (h && i) {
  19. comp = x.thenComparing(y);
  20. } else if (h) {
  21. comp = x.thenComparing(y.reversed());
  22. } else if (i) {
  23. comp = x.reversed().thenComparing(y);
  24. } else {
  25. comp = x.reversed().thenComparing(y.reversed());
  26. }
  27. }
  28.  
  29. public static void main(String[] args) {
  30. Comparator<Book> page = Comparator.comparing(Book::getPageNb);
  31. Comparator<Book> title = Comparator.comparing(Book::getTitle);
  32. Comparator<Book> aver = Comparator.comparing(Book::getAverage);
  33.  
  34. ComplexComparator c1 = new ComplexComparator(page, title);
  35. ComplexComparator c2 = new ComplexComparator(page, false, title, true);
  36. ComplexComparator c3 = new ComplexComparator(aver, false, title, true);
  37.  
  38. Book b1 = new Book(5, "abc", 10);
  39. Book b2 = new Book(10, "abc", 10);
  40. System.out.println(c1.compare(b1, b2)); // -1, page only
  41. System.out.println(c2.compare(b1, b2)); // 1, page only reversed
  42. System.out.println(c3.compare(b1, b2)); // 0, same page&title
  43. }
  44.  
  45. @Override
  46. public int compare(Book o1, Book o2) {
  47. return comp.compare(o1, o2);
  48. }
  49. }
  50.  
  51. class Book {
  52. int pageNb;
  53. String title;
  54. int average;
  55.  
  56. public Book(int pageNb, String title, int average) {
  57. this.pageNb = pageNb;
  58. this.title = title;
  59. this.average = average;
  60. }
  61.  
  62. public int getPageNb() { return pageNb; }
  63. public String getTitle() { return title; }
  64. public int getAverage() { return average; }
  65. }
Success #stdin #stdout 0.15s 33828KB
stdin
Standard input is empty
stdout
-1
1
0