Java温故而知新-比较器

107 篇文章 1 订阅
本文详细介绍了如何使用Java中的Comparable接口和Comparator接口对对象数组进行排序。通过Book类实例展示了如何实现Comparable接口进行自然排序,以及自定义Comparator实现定制排序。此外,还演示了使用Lambda表达式简化Comparator的代码实现。
摘要由CSDN通过智能技术生成


Comparable接口

观察ClassCastException

import java.util.Arrays;

class Book {
    private String title ;
    private double price ;
    public Book(String title, double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return "【Book】图书名称:" + this.title + "、图书价格:" + this.price + "\n" ;
    }
    // setter、getter、无参构造,略 ...
}
public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Book books [] = new Book[] {
                new Book("Java从入门到项目实战", 99.8) ,
                new Book("Python从入门到项目实战", 89.7) ,
                new Book("GO语言从入门到项目实战", 96.3)
        } ; // 提供有一个对象数组
        Arrays.sort(books); // 数组排序处理
        System.out.println(Arrays.toString(books)); // 实现对象数组的字符串转换
        
    }
}

在这里插入图片描述
在这里插入图片描述

实现对象数组的排序

package com.yootk.demo;

import java.util.Arrays;

class Book implements Comparable<Book> { // 这个类拥有排序支持
    private String title ;
    private double price ;
    public Book(String title, double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return "【Book】图书名称:" + this.title + "、图书价格:" + this.price + "\n" ;
    }
    @Override
    public int compareTo(Book o) {
        if (this.price > o.price) {
            return 1 ;
        } else if (this.price < o.price) {
            return -1 ;
        } else {
            return 0 ;
        }
    }
    // setter、getter、无参构造,略 ...
}
public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Book books [] = new Book[] {
                new Book("Java从入门到项目实战", 99.8) ,
                new Book("Python从入门到项目实战", 89.7) ,
                new Book("GO语言从入门到项目实战", 96.3)
        } ; // 提供有一个对象数组
        Arrays.sort(books); // 数组排序处理
        System.out.println(Arrays.toString(books)); // 实现对象数组的字符串转换
    }
}

在这里插入图片描述

Comparator接口

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用 Comparator使用对象数组排序

package com.yootk.demo;
import java.util.Arrays;
import java.util.Comparator;

class Book{ // 这个类拥有排序支持
    private String title ;
    private double price ;
    public Book(String title, double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return "【Book】图书名称:" + this.title + "、图书价格:" + this.price + "\n" ;
    }
    public String getTitle() {
        return title;
    }
    public double getPrice() {
        return price;
    }
}
class BookComparator implements Comparator<Book> {  // 提供有专属的比较器实现类
    @Override
    public int compare(Book o1, Book o2) {
        if (o1.getPrice() > o2.getPrice()) {
            return 1 ;
        } else if (o1.getPrice() < o2.getPrice()) {
            return -1 ;
        } else {
            return 0;
        }
    }
}
public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Book books [] = new Book[] {
                new Book("Java从入门到项目实战", 99.8) ,
                new Book("Python从入门到项目实战", 89.7) ,
                new Book("GO语言从入门到项目实战", 96.3)
        } ; // 提供有一个对象数组
        Arrays.sort(books, new BookComparator()); // 数组排序处理
        System.out.println(Arrays.toString(books)); // 实现对象数组的字符串转换
    }
}

通过Lambda表达式实现简写

在这里插入图片描述

import java.util.Arrays;
import java.util.Comparator;

class Book{ // 这个类拥有排序支持
    private String title ;
    private double price ;
    public Book(String title, double price) {
        this.title = title ;
        this.price = price ;
    }
    public String toString() {
        return "【Book】图书名称:" + this.title + "、图书价格:" + this.price + "\n" ;
    }
    public String getTitle() {
        return title;
    }
    public double getPrice() {
        return price;
    }
}
public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Book books [] = new Book[] {
                new Book("Java从入门到项目实战", 99.8) ,
                new Book("Python从入门到项目实战", 89.7) ,
                new Book("GO语言从入门到项目实战", 96.3)
        } ; // 提供有一个对象数组
        Comparator<Book> comparator = (o1, o2)->{
            if (o1.getPrice() > o2.getPrice()) {
                return 1 ;
            } else if (o1.getPrice() < o2.getPrice()) {
                return -1 ;
            } else {
                return 0;
            }
        } ;
        Arrays.sort(books, comparator.reversed()); // 数组排序处理
        System.out.println(Arrays.toString(books)); // 实现对象数组的字符串转换
    }
}

在这里插入图片描述

教程出处

https://www.bilibili.com/video/BV1PE41187Vd?p=262

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值