java Comparator与Comparable

简介:

遇到了一个问题,如果之前用的List集合没排序。突然间就一个快要排一下序,找到了Collections

这个工具类,用Collections.sort(spiderModel); 排序,

List<SpiderModel> spiderModel = new ArrayList<SpiderModel>();

spiderModel.add(new SpiderModel("1", 1, 20));

spiderModel.add(new SpiderModel("220", 2, 20));

spiderModel.add(new SpiderModel("31", 3, 20));

Collections.sort(spiderModel); //这里会编译器会提示报错,告诉我们要实现Comparable<T>这个接口,

这样写就不报错了,而且可以自定义排序,是不是很好,但是,业务嘛,经常变的,哪天又变了排序规则,你还得改代码,

还得上线,改完说不行,又要改过来,到时候你还得改,所以找找有没有别的办法。

public class SpiderModel implements Comparable<SpiderModel>{


/**

 * 订单名称

 */

private String spiderOrderName;

/**

 * 当前页

 */

private int currentPage;

/**

 * 总页数

 */

private int totalPage;

public SpiderModel(String spiderOrderName, int currentPage, int totalPage) {

super();

this.spiderOrderName = spiderOrderName;

this.currentPage = currentPage;

this.totalPage = totalPage;

}


public String getSpiderOrderName() {

return spiderOrderName;

}


public void setSpiderOrderName(String spiderOrderName) {

this.spiderOrderName = spiderOrderName;

}


public int getCurrentPage() {

return currentPage;

}


public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}


public int getTotalPage() {

return totalPage;

}


public void setTotalPage(int totalPage) {

this.totalPage = totalPage;

}


@Override

public int compareTo(SpiderModel o) {

if (this.totalPage < o.getTotalPage())

            return -1;

        else if (this.totalPage == o.getTotalPage())

            return this.spiderOrderName.compareTo(o.getSpiderOrderName());

        else

            return 1;

}

}


Comparator这个接口,是可以比较的,将Collections.sort(list) 改成 Collections.sort(list, new SpiderCompare());

就可以了,以后更改只需要实现这个接口,增加新的比较规则就行。

public class SpiderCompare implements Comparator<SpiderModel>{


@Override

public int compare(SpiderModel o1, SpiderModel o2) {

if (o1.getTotalPage() < o2.getTotalPage())

            return -1;

        else if (o1.getTotalPage() < o2.getTotalPage())

            return o1.getSpiderOrderName().compareTo(o2.getSpiderOrderName());

        else

            return 1;

}

}


如果觉得自己写代码,一个很简单的事情,如果写了好多代码,就停下来想想,这么写对不对,我个人做法是,领导给我的任务,我会先想,想好了在做,想的时间不会耽误进度的。



本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1914554


相关文章
|
9月前
|
Java 程序员
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
120 20
|
搜索推荐 Java
Java 中 Comparator 和 Comparable 的区别
【8月更文挑战第22天】
255 0
|
Java
"Java排序大揭秘:Comparable与Comparator,究竟有何神秘区别?掌握它们,告别排序难题!"
【8月更文挑战第19天】Java提供Comparable与Comparator两种排序机制。Comparable位于`java.lang`包,定义了`compareTo()`方法以实现类的自然排序;Comparator位于`java.util`包,通过`compare()`方法提供外部定制排序。实现Comparable固定了排序策略,适用于类自带排序逻辑;使用Comparator则可在不改动类的前提下灵活定义多种排序规则,适合多样化的排序需求。选择合适机制可优化排序效率并增强代码灵活性。
117 0
Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Comparator接口的区别,那么只看这一篇就足够了!)
Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Comparator接口的区别,那么只看这一篇就足够了!)
【JAVA学习之路 | 提高篇】Java比较器(comparable) &&(comparator)
【JAVA学习之路 | 提高篇】Java比较器(comparable) &&(comparator)
|
Java
【Java】通过Comparator比较器的方式给对象数组排序
【Java】通过Comparator比较器的方式给对象数组排序
144 0
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--Comparable接口
数据结构与算法(Java篇)笔记--Comparable接口
|
Java
java 实现Comparable接口排序,升序、降序、倒叙
java 实现Comparable接口排序,升序、降序、倒叙
144 0
|
Java
彻底搞懂Java中的Comparable和Comparator
彻底搞懂Java中的Comparable和Comparator
403 0
|
算法 Java 开发者
21. 你能说说Java中Comparable和Comparator的区别吗
21. 你能说说Java中Comparable和Comparator的区别吗
218 0