对于自定义类进行排序
要实现Comparable接口,重写compareTo() 方法,如果不重写,像使用Arrays.sort()排序就会报错
package com.che.lambda; import java.util.Objects; /** * @author cheyuhang on 2021/4/23 */ public class Good implements Comparable{ private String name; private Double price; public Good(String name, Double price) { this.name = name; this.price = price; } public Good() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Good good = (Good) o; return Objects.equals(name, good.name) && Objects.equals(price, good.price); } @Override public int hashCode() { return Objects.hash(name, price); } @Override public String toString() { return "Good{" + "name='" + name + '\'' + ", price=" + price + '}'; } @Override public int compareTo(Object o) { if (o instanceof Good){ //判断传递参数是否属于商品 Good good=(Good) o; if(this.price >good.price){ return 1; }else if(this.price <good.price) { return -1; }else { return 0; } } throw new RuntimeException("传入数据类型不一致"); } }
使用场景:当类没有实现Comparable接口或者实现了Comparable接口,但不符合我期望的排序规则时进行使用
@Test public void test02() { Good[] arr=new Good[5]; arr[0] =new Good("zhangsan",234.0); arr[1] =new Good("lisi",2343.0); arr[2] =new Good("wangwu",2354.0); arr[3] =new Good("zhaoliu",2334.0); arr[4] =new Good("tianqi",2347.0); System.out.println(Arrays.toString(arr)); Arrays.sort(arr, new Comparator<Object>() @Override public int compare(Object o1, Object o2) { if (o1 instanceof Good && o2 instanceof Good){ Good g1=(Good) o1; Good g2=(Good) o2; return Double.compare(g1.getPrice(),g2.getPrice()); //return g1.compareTo(g2); } throw new RuntimeException("数据类型不一致"); } }); System.out.println(Arrays.toString(arr)); }
到此这篇关于Java基础之Comparable与Comparator详解的文章就介绍到这了,更多相关Java Comparable与Comparator内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系QQ:712375056 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
Copyright © 2009-2021 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 珠海市特网科技有限公司 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站