list对象排序(对list集合进行排序)

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

如何对List中的对象进行排序

list

是你要排序的。

Collections

是集合的公共类,提供各种工具,其中提供了排序方法。

Collections.sort(),方法两个参数,1,要排序的集合,2.排序方式

下面是匿名内部类,实现了排序借口,你也可以写外面。

Comparator

c=new

Comparator()

如何对List 进行排序

第一种:实体类实现IComparable接口,而且必须实现CompareTo方法

class Info:IComparable

{

public int Id { get; set; }

public string Name { get; set; }

public int CompareTo(object obj) {

int result;

try

{

Info info = obj as Info;

if (this.Id info.Id)

{

result = 0;

}

else

result = 1;

return result;

}

catch (Exception ex) { throw new Exception(ex.Message); }

}

}

调用方式如下,只需要用sort方法就能实现对list进行排序。

private static void ReadAccordingCompare() {

ListInfo infoList = new ListInfo();

infoList.Add(

new Info() { Id = 1, Name = "abc" });

infoList.Add(new Info() { Id = 3, Name = "rose" });

infoList.Add(new Info() { Id = 2, Name = "woft" });

infoList.Sort();

foreach (var item in infoList)

{

Console.WriteLine(item.Id + ":" + item.Name);

}

}

第二种方法:linq to list进行排序

运用linq实现对list排序,在实体类定义的时候就不需用实现IComparable接口,调用方式如下:

private static void ReadT(string str) {

ListInfo infoList = new ListInfo();

infoList.Add(

new Info() { Id = 1, Name = "woft" });

infoList.Add(new Info() { Id=3,Name="rose"});

infoList.Add(new Info() { Id = 2, Name = "abc" });

Console.WriteLine("ReadT*********************");

IEnumerableInfo query = null;

query = from items in infoList orderby items.Id select items;

foreach (var item in query)

{

Console.WriteLine(item.Id+":"+item.Name);

}

}

但是上面两种方式都只能对一个实体属性排序,如果对不同的属性排序的话只能写很多的if进行判断,这样显得很麻烦。且看下面的方式实现根据传入参数进行排序。

private static void ListSort(string field,string rule)

{

if (!string.IsNullOrEmpty(rule)(!rule.ToLower().Equals("desc")||!rule.ToLower().Equals("asc")))

{

try

{

ListInfo infoList = GetList();

infoList.Sort(

delegate(Info info1, Info info2)

{

Type t1 = info1.GetType();

Type t2 = info2.GetType();

PropertyInfo pro1 = t1.GetProperty(field);

PropertyInfo pro2 = t2.GetProperty(field);

return rule.ToLower().Equals("asc") ?

pro1.GetValue(info1, null).ToString().CompareTo(pro2.GetValue(info2, null).ToString()) :

pro2.GetValue(info2, null).ToString().CompareTo(pro1.GetValue(info1, null).ToString());

});

Console.WriteLine("*****ListSort**********");

foreach (var item in infoList)

{

Console.WriteLine(item.Id + "," + item.Name);

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

} Console.WriteLine("ruls is wrong");

}

调用方式:

ListSort("Name","desc");//表示对Name进行desc排序

ListSort("Id","asc");//表示对Id进行asc排序。如此如果参数很多的话减少了很多判断。

如何对 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集合中的对象进行排序?

看你list里面装的是什么对象了,普通的整数或字符串对象ArrayList.sort() 应该就可以了,如果是自定义的对象,可以先用对象实现Comparable接口

如何实现按照List集合中对象某个属性排序

给集合排序 ,常见的方法是给集合提供1个比较器Comparator.

import?java.util.*;

class?Stu{//学生类

String?name;

int?age;

public?Stu(String?name,int?age)?{

this.name?=?name;

this.age=age;

}

@Override

public?String?toString()?{

return?"姓名:"+name+"?年龄:"+age;

}

}

public?class?Test?{

public?static?void?main(String[]?args)?{

ArrayListStu?list?=?new?ArrayListStu();

list.add(new?Stu("jack",12));

list.add(new?Stu("lily",13));

list.add(new?Stu("lucy",15));

list.add(new?Stu("tom",11));

System.out.println(list);

//给集合排序

list.sort(new?ComparatorStu()?{//Comparator?比较器.?需要实现比较方法

@Override

public?int?compare(Stu?o1,?Stu?o2)?{

return?o1.age-o2.age;//从小到大?,?如果是o2.age-o1.age?则表示从大到小

}

});

System.out.println(list);

}

}

输出

[姓名:jack?年龄:12,?姓名:lily?年龄:13,?姓名:lucy?年龄:15,?姓名:tom?年龄:11]

[姓名:tom?年龄:11,?姓名:jack?年龄:12,?姓名:lily?年龄:13,?姓名:lucy?年龄:15]

(责任编辑:IT教学网)

更多

推荐PowerPoint文章