Android中list集合的排序方法

Android中list集合的排序方法

Collections对List集合中的数据进行排序

有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到

Java中提供的对集合进行操作的工具类Collections,其中的sort方法

 

先看一个简单的例子:

 

输出结果:

[3, 5, 1, 0]
[0, 1, 3, 5]

 

稍微复杂的List里面放一个复杂的对象 

package core.java.collection.collections;

public class User implements Comparable<User>{

    private int score;

    private int age;

    public User(int score, int age){
        super();
        this.score = score;
        this.age = age;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(User o) {
        int i = this.getAge() - o.getAge();//先按照年龄排序
        if(i == 0){
            return this.score - o.getScore();//如果年龄相等了再用分数进行排序
        }
        return i;
    }

}

public static void main(String[] args) {
        List<User> users = new ArrayList<User>();
        users.add(new User(78, 26));
        users.add(new User(67, 23));
        users.add(new User(34, 56));
        users.add(new User(55, 23));
        Collections.sort(users);
        for(User user : users){
            System.out.println(user.getScore() + "," + user.getAge());
        }
}

输出结果:
55,23
67,23
78,26
34,56
我们会发现sort(List<T>)方法中List中的T必须实现Comparable<T>接口,然后实现
compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么
在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现
了Comparable接口,Java已经给我们做好了。

Collections提供的第二种排序方法sort(List<T> list, Comparator<? super T> c)
先看例子:派生到我的代码片

package core.java.collection.collections;

public class Students {

    private int age;
    private int score;

    public Students(int age, int score){
        super();
        this.age = age;
        this.score = score;
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
}
public static void main(String[] args) {
        List<Students> students = new ArrayList<Students>();
        students.add(new Students(23, 100));
        students.add(new Students(27, 98));
        students.add(new Students(29, 99));
        students.add(new Students(29, 98));
        students.add(new Students(22, 89));
        Collections.sort(students, new Comparator<Students>() {

            @Override
            public int compare(Students o1, Students o2) {
                int i = o1.getScore() - o2.getScore();
                if(i == 0){
                    return o1.getAge() - o2.getAge();
                }
                return i;
            }
        });
        for(Students stu : students){
            System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
        }
}

输出结果:
score:89:age22
score:98:age27
score:98:age29
score:99:age29
score:100:age23

从上面的例子我们可以看出Students类没有实现Comparable<T>接口,只是在sort()方法
中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

以上就是是Java中Colelctions工具类为我们提供的两种集合排序方法

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用list stream按照时间排序,可以采用以下方法之一: 方法1:使用Collections.sort和Comparator 通过创建一个自定义的Comparator,将其传递给Collections.sort方法,可以对list进行升序或降序排序。首先,确保日期格式统一化,然后使用Comparator.comparing将日期属性作为排序条件。最后,使用Collections.sort对list进行排序。 示例代码如下: ``` Collections.sort(list, Comparator.comparing(obj -> obj.getPayTime())); ``` 方法2:使用stream和sorted 通过将list转换为stream,然后使用sorted方法,可以对list进行排序。在排序之前,需要将日期字符串转换为时间戳。可以使用SimpleDateFormat来解析日期字符串,并将其转换为Date对象。然后,使用Date对象的getTime方法获取时间戳。最后,使用stream的sorted方法list进行排序。 示例代码如下: ``` list = list.stream() .sorted((obj1, obj2) -> { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date1 = format.parse(obj1.getPayTime()); Date date2 = format.parse(obj2.getPayTime()); return date1.getTime() - date2.getTime(); } catch (ParseException e) { e.printStackTrace(); } return 0; }) .collect(Collectors.toList()); ``` 无论选择哪种方法,都可以按照时间对list进行排序。根据需求,选择合适的方法即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [AndroidList时间升序排序](https://download.csdn.net/download/woshixiaonie455/8228157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java集合List按日期升序或降序四种方法](https://blog.csdn.net/yc18329961585/article/details/118734016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值