关于集合的排序

来源:互联网 发布:电脑淘宝如何收藏宝贝 编辑:程序博客网 时间:2024/06/14 18:26

场景:从mongo库查询不同表的时间字段,获取所有年份,按照从大到小排序,并去除重复年份

挖坑过程:

1.首先想到treeSet集合的特性,int自然序列排序,去重,试了一试发现是顺序排列(由于懒放弃了自己写比较器。)

2.然后想到用sql降序排好序,在利用set集合的去重机制,利用linkedHashSet按存储循序排列的特点实现,后发现mongo两个集合查询的年份整合到一起还是乱序。

3.前几天用看了一些关于集合的文章,想到集合的一些tree类型可以自定义排序,于是又查了些关于集合排序的资料,突然发现treeSet的默认排序也是用比较器写的,Integer已经帮实现了比较器。Arrays.sort(array);内部也是使用了比较器。好吧那就自己写一个比较器吧。如下

class MyComparator implements Comparator<Integer>{         @Override    public int compare(Integer a, Integer b) {   
//从大到小           if(a > b){              return -1;           }else if(a < b){              return 1;           }       return 0;    }}
使用:Set<Integer> set_=new TreeSet<Integer>(new MyComparator());

4.比较器也可以实现根据类中的字段排序

例:

class ActivityLitSaleTopSort implements Comparator<ActivityLitSaleTopDTO> {@Overridepublic int compare(ActivityLitSaleTopDTO k1, ActivityLitSaleTopDTO k2) {if (k1.getTopAmount() < k2.getTopAmount()) {return 1;} else if (k1.getTopAmount() > k2.getTopAmount()) {return -1;} else {return 0;}}}

public class ActivityLitSaleTopDTO {private String litId;    private String topName;    private Double topAmount=0.0;    private Integer topVolume=0;    private IntegertopOrder=0;    private DoubletopPayRate=0.0;    

使用:

Collections.sort(topDtos, new ActivityLitSaleTopSort());