fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6. import java.text.*;
  7.  
  8. /* Name of the class has to be "Main" only if the class is public. */
  9. class Ideone
  10. {
  11. private static class MyObject {
  12. private Date date;
  13. private int price;
  14. private int quality;
  15.  
  16. MyObject(Date date, int price, int quality) {
  17. this.date = date;
  18. this.price = price;
  19. this.quality = quality;
  20. }
  21.  
  22. public Date getDate() {
  23. return date;
  24. }
  25.  
  26. public int getPrice() {
  27. return price;
  28. }
  29.  
  30. public int getQuality() {
  31. return quality;
  32. }
  33.  
  34. @Override
  35. public String toString() {
  36. Format sdf = new SimpleDateFormat("dd/MM/yyyy");
  37. return "MyObject[" + sdf.format(date) + ", " + price + ", " + quality + "]";
  38. }
  39. }
  40.  
  41. private static class MyObjectComparator implements Comparator<Object> {
  42.  
  43. private String getter;
  44.  
  45. public MyObjectComparator(String field) {
  46. this.getter = "get" + field.substring(0, 1).toUpperCase() + field.substring(1);
  47. }
  48.  
  49. @Override
  50. public int compare(Object o1, Object o2) {
  51. try {
  52. if (o1 != null && o2 != null) {
  53. o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
  54. o2 = o2.getClass().getMethod(getter, new Class[0]).invoke(o2, new Object[0]);
  55. }
  56. } catch (Exception e) {
  57. throw new RuntimeException("Cannot compare " + o1 + " with " + o2 + " on " + getter, e);
  58. }
  59.  
  60. return (o1 == null) ? -1 : ((o2 == null) ? 1 : ((Comparable<Object>) o1).compareTo(o2));
  61. }
  62. }
  63.  
  64. public static void main (String[] args) throws java.lang.Exception
  65. {
  66. SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  67. List<MyObject> objs = new ArrayList<>();
  68. objs.add(new MyObject(sdf.parse("21/12/2015"), 1234, 2));
  69. objs.add(new MyObject(sdf.parse("12/01/2016"), 134, 4));
  70. objs.add(new MyObject(sdf.parse("01/01/2012"), 3244, 1));
  71.  
  72. System.out.println("Сортировка по качеству:");
  73. Collections.sort(objs, new MyObjectComparator("quality"));
  74. System.out.println(objs);
  75.  
  76. System.out.println("Сортировка по цене:");
  77. Collections.sort(objs, new MyObjectComparator("price"));
  78. System.out.println(objs);
  79.  
  80. System.out.println("Сортировка по дате:");
  81. Collections.sort(objs, new MyObjectComparator("date"));
  82. System.out.println(objs);
  83. }
  84. }
Success #stdin #stdout 0.15s 321280KB
stdin
Standard input is empty
stdout
Сортировка по качеству:
[MyObject[01/01/2012, 3244, 1], MyObject[21/12/2015, 1234, 2], MyObject[12/01/2016, 134, 4]]
Сортировка по цене:
[MyObject[12/01/2016, 134, 4], MyObject[21/12/2015, 1234, 2], MyObject[01/01/2012, 3244, 1]]
Сортировка по дате:
[MyObject[01/01/2012, 3244, 1], MyObject[21/12/2015, 1234, 2], MyObject[12/01/2016, 134, 4]]