1. package test;
    2. import java.util.Arrays;
    3. import java.util.Comparator;
    4. public class Main {
    5. public static void main(String[] args) {
    6. /*
    7. 案例:自定义Book类,里面包含name和price,按price排序(从大到小)。
    8. 要求使用两种方式排序 , 有一个 Book[] books = 4本书对象.
    9. 使用前面学习过的传递 实现Comparator接口匿名内部类,也称为定制排序。
    10. [同学们完成这个即可 10min ],
    11. 可以按照 price (1)从大到小 (2)从小到大 (3) 按照书名长度从大到小
    12. */
    13. Book[] books = new Book[4];
    14. books[0] = new Book("红楼梦", 100);
    15. books[1] = new Book("金瓶梅新", 90);
    16. books[2] = new Book("青年文摘20年", 5);
    17. books[3] = new Book("java从入门到放弃~", 300);
    18. //(1)price从大到小
    19. // Arrays.sort(books, new Comparator() {
    20. // //这里是对Book数组排序,因此 o1 和 o2 就是Book对象
    21. // @Override
    22. // public int compare(Object o1, Object o2) {
    23. // Book book1 = (Book) o1;
    24. // Book book2 = (Book) o2;
    25. // double priceVal = book2.getPrice() - book1.getPrice();
    26. // //这里老师进行了一个转换
    27. // //如果发现返回结果和我们输出的不一致,就修改一下返回的 1 和 -1
    28. // if(priceVal > 0) {
    29. // return 1;
    30. // } else if(priceVal < 0) {
    31. // return -1;
    32. // } else {
    33. // return 0;
    34. // }
    35. // }
    36. // });
    37. //(2)price从小到大
    38. // Arrays.sort(books, new Comparator() {
    39. // //这里是对Book数组排序,因此 o1 和 o2 就是Book对象
    40. // @Override
    41. // public int compare(Object o1, Object o2) {
    42. // Book book1 = (Book) o1;
    43. // Book book2 = (Book) o2;
    44. // double priceVal = book2.getPrice() - book1.getPrice();
    45. // //这里老师进行了一个转换
    46. // //如果发现返回结果和我们输出的不一致,就修改一下返回的 1 和 -1
    47. // if(priceVal > 0) {
    48. // return -1;
    49. // } else if(priceVal < 0) {
    50. // return 1;
    51. // } else {
    52. // return 0;
    53. // }
    54. // }
    55. // });
    56. //(3)按照书名长度从大到小
    57. Arrays.sort(books, new Comparator() {
    58. //这里是对Book数组排序,因此 o1 和 o2 就是Book对象
    59. @Override
    60. public int compare(Object o1, Object o2) {
    61. Book book1 = (Book) o1;
    62. Book book2 = (Book) o2;
    63. //要求按照书名的长度来进行排序
    64. return book2.getName().length() - book1.getName().length();
    65. }
    66. });
    67. System.out.println(Arrays.toString(books));
    68. }
    69. }
    70. class Book {
    71. private String name;
    72. private double price;
    73. public Book(String name, double price) {
    74. this.name = name;
    75. this.price = price;
    76. }
    77. public String getName() {
    78. return name;
    79. }
    80. public void setName(String name) {
    81. this.name = name;
    82. }
    83. public double getPrice() {
    84. return price;
    85. }
    86. public void setPrice(double price) {
    87. this.price = price;
    88. }
    89. @Override
    90. public String toString() {
    91. return "Book{" +
    92. "name='" + name + '\'' +
    93. ", price=" + price +
    94. '}';
    95. }
    96. }

    image.png