list集合排序(list集合排序升序和降序)

http://www.itjxue.com  2023-02-21 13:20  来源:未知  点击次数: 

如何对 List 排序

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

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

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

先看一个简单的例子:

public static void main(String[] args) {

ListInteger nums = new ArrayListInteger();

nums.add(3);

nums.add(5);

nums.add(1);

nums.add(0);

System.out.println(nums);

Collections.sort(nums);

System.out.println(nums);

}

输出结果:

[3, 5, 1, 0]

[0, 1, 3, 5]

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

package core.java.collection.collections;

public class User implements ComparableUser{

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) {

ListUser users = new ArrayListUser();

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(ListT)方法中List中的T必须实现ComparableT接口,然后实现

compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;为什么

在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现

了Comparable接口,Java已经给我们做好了。

Collections提供的第二种排序方法sort(ListT 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) {

ListStudents students = new ArrayListStudents();

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 ComparatorStudents() {

@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类没有实现ComparableT接口,只是在sort()方法

中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。

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

集合List根据多个字段进行排序

????????最近用java抓取数据的时候,遇到了需要对拿到的List集合按照多个字段进行排序。首先得让排序的实体类实现Comparable类并且重写它的compareTo方法,在compareTo中你可以自定义排序的规则。如果前者大于后者,则返回1,若果相等则返回0,若果前者小于后者,则返回-1;String字符串比较的时候也会经常用到这个compareTo方法,查看String类,可以看到它也实现了Comparable类。

String类

新建一个User类:按照id升序,age降序来排序。

再建一个Junit测试类

排序结果

如何对List集合中的数据进行排列

方法一:实现Comparable接口排序package collsort.comparable;

package com.cvicse.sort.comparable;

public class Cat implements ComparableCat {

private int age;

private String name;

public Cat(int age, String name) {

this.age = age;

this.name = name;

}

public int getAge() {

return age;

(责任编辑:IT教学网)

更多

推荐Flash actionscript文章