关于自定义 List集合排序的方法!

大致流程:

排序是用到排序的接口Comparator<T>
你要先建一个类实现比较器Comparator

//大致流程public class StuComp implements Comparator<Student> {

public int compare(Student o1, Student o2) {
return o1.getName().compareToIgnoreCase(o2.getName());
}
}

然后在Collections.sort(list);的时候加上这个排序比较器
Collections.sort(list,new StuComp());结果就对了。

举例:有一个关于消息的实现类,根据消息的时间从大排到小,根据消息的是否已读让未读的排前,已读的拍后

消息的实现类:

package com.educationcrm.model;

/**
 * Created by laobiao on 2016/5/21.
 * 消息列表对象
 */
public class NewsListModel {
    private int NewsId;//消息ID
    private String sendName;//发送人姓名
    private String title;//消息的标题
    private String day;//消息发送时间
    private String idRead;//是否已读
    private String type;//消息类型

    public NewsListModel(int newsId, String sendName, String title, String day, String idRead, String type) {
        NewsId = newsId;
        this.sendName = sendName;
        this.title = title;
        this.day = day;
        this.idRead = idRead;
        this.type = type;
    }

    public int getNewsId() {
        return NewsId;
    }

    public void setNewsId(int newsId) {
        NewsId = newsId;
    }

    public String getSendName() {
        return sendName;
    }

    public void setSendName(String sendName) {
        this.sendName = sendName;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDay() {
        return day;
    }

    public void setDay(String day) {
        this.day = day;
    }

    public String getIdRead() {
        return idRead;
    }

    public void setIdRead(String idRead) {
        this.idRead = idRead;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

这里是两个排序方法;

//日期比较
class dayComparator implements Comparator<NewsListModel>{

    @Override
    public int compare(NewsListModel o1, NewsListModel o2) {
       if(o1==null){
           return -1;
       }
        if(o2==null){
            return -1;
        }
        SimpleDateFormat sim = new SimpleDateFormat("MM月dd日 HH:mm");
        try {
            long o1date=sim.parse(o1.getDay()).getTime();
            long o2date=sim.parse(o2.getDay()).getTime();
            if(o1date>o2date){
                return -1;
            }else {
                return 1;
            }

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return 0;
    }
}

//是否已读比较,通过判断他们的已读属性来返回值
class isReadComparator implements Comparator<NewsListModel>{

    @Override
    public int compare(NewsListModel o1, NewsListModel o2) {
        if(o1==null){
            return -1;
        }
        if(o2==null){
            return 1;
        }

        if(o1.getIdRead()=="yes" && o2.getIdRead()=="no"){
            return 1;
        }
        if (o1.getIdRead()=="no" && o2.getIdRead()=="yes"){
            return -1;
        }
        return 0;

    }

下面是实现方法:

 Collections.sort(a,new dayComparator());//先进行日期排序
 Collections.sort(a,new isReadComparator());//再进行时间排序

用到的类和方法:

排序工具类:Comparator<T>;

排序判断方法:compare; 返回值为1时,第二个参数会排在第一个参数前面,-1则第一个参数排前面,0时则不排序;

调用排序方法:sort(<T>object,Comparator<T> x);

  


新建一个Comparator<T>的实现类,在类中重写compare()方法;再使用list.sort()方法来调用这个实现类,即可实现排序;

时间: 2024-10-05 04:09:32

关于自定义 List集合排序的方法!的相关文章

Collections -集合排序compareTo方法重写,shuffle,addall

package cn.learn.collection.Collections; /* 排序的对象的类,实现comparable借口,重写compareto方法 若要打印必须重写toString方法,会默认调用 */ public class Person implements Comparable<Person>{ private String name; private int age; @Override public String toString() { return "P

Java中List集合排序的方法 比较器的使用 根据学生对象数序 语文 英语成绩总和进行sort排序

package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Test2_ObjectIO { @SuppressWarnings("unchecked") public static void main(Strin

java集合排序方法sort的使用

转自  http://blog.csdn.net/a1165117473/article/details/6965652 /** To change this template, choose Tools | Templates* and open the template in the editor.*/ package com.city.test; import java.util.Arrays;import java.util.Comparator;/**** @author LiuB*/

CollectionsDemo1+2 List集合普通元素的排序,自定义类型的排序

CollectionsDemo1 List集合普通元素的排序,自然排序 /** * List集合的排序 * 排序List集合使用集合的工具类Collections的静态方法sort, * 该方法可以对指定List集合进行自然排序(从小到大) */ public class SortDemo1 { public static void main(String[] args) { //1,生成一个List<Insteger>集合 List<Integer> list = new Arr

最简单的List集合排序方法

将数组按照一定的规则排序最简单的方法就是借助Arrays类的sort方法,那么要实现List集合排序的排序最简单的方式又是什么呢?当然是借助Collections类的sort方法,下面以一个例子来说明如何使用该方法实现List集合的排序: 代码一: package com.ghj.packageofvo; public class User { private String name; //姓名 private String birthday;//出生日期 public User(String

dedecms网站文章内容按自定义排序的方法

标签dede:arclist的排序是通过orderby来指定的,如下: {dede:arclist orderby=’排序字段’ }{/dede:arclist} orderby=’sortrank’ 文档排序方式 § orderby=’hot’ 或 orderby=’click’ 表示按点击数排列§ orderby=’sortrank’ 或 orderby=’pubdate’ 按出版时间排列§ orderby=’near’§ orderby==’lastpost’ 按最后评论时间§ order

CopyOnWriteArrayList集合排序异常问题

1.集合自定义排序实现 对List集合的自定义排序想必大家都知道要使用如下的方式,通过实现Comparator接口并实现compare方法来实现. /** * * @方法名 changeChain * @描述 改变请求链 * @参数 * @返回类型 void * @作者 cymiao */ public static void changeChain(Class<? extends Chain> type){ List<? extends Chain> list = Dynamic

Java集合排序及java集合类详解--(Collection, List, Set, Map)

1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情. 举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号.我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内

C#学习之自定义数组及其排序

在C#中对数组的定义比较灵活.这里着重说一下自定义数组和Array类的排序. 在Array类中通过属性Length就可以获取整个数组中数据的数量,可以通过foreach迭代数组. 使用Rank属性可以获取数组的维数,通过属性LongLength也可获取数组中数据的数量,但是基本上不用. 它是当数组中放置的数据量超出了整数的范围时才用. Array类中排序的方法比较简单,对于string 和 Int 类型直接用Array.Sort()就可以. 但是对于自定义的数组就需要在类中写出Array.Sor