java怎么对list进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么对list进行排序相关的知识,希望对你有一定的参考价值。

1,使用Comparator 接口

Student类 结构如下:(省略getter,setter方法)

public class Student
/***
* 姓名
*/
private String name;
private int age;
private String address;
/***
* 考试得分
*/
private int score;

//省略getter,setter方法
@Override
public String toString()
return "Student [name=" + name + ", age=" + age + ", score=" + score
+ "]";




测试方法:

@Test
public void test_ListComparator()
List<Student>students=new ArrayList<Student>();
Student stu=null;
stu=new Student();
stu.setName("whuang");
stu.setAge(12);
stu.setScore(80);
students.add(stu);

stu=new Student();
stu.setName("rong");
stu.setAge(11);
stu.setScore(90);
students.add(stu);

stu=new Student();
stu.setName("zhu");
stu.setAge(15);
stu.setScore(100);
students.add(stu);

Collections.sort(students,new SystemHWUtil. ListComparator(true,"age"));
System.out.println(students);



运行结果:

[Student [name=rong, age=11, score=90], Student [name=whuang, age=12, score=80], Student [name=zhu, age=15, score=100]]

核心类:

public static class ListComparator implements Comparator
/***
* 是否转化为Int之后再比较
*/
private boolean isConvertInteger;
/***
* 对哪个列进行排序
*/
private String comparedProperty;
public ListComparator(boolean isConvertInteger,String comparedProperty)
super();
this.isConvertInteger = isConvertInteger;
this.comparedProperty=comparedProperty;

public int compare(Object o1, Object o2)
if(null!=o1&&null!=o2)

try
Object obj1=ReflectHWUtils.getObjectValue(o1, comparedProperty);
Object obj2=ReflectHWUtils.getObjectValue(o2, comparedProperty);
if(isConvertInteger)
int num1;
int num2;
if(obj1 instanceof Integer)
num1=(Integer)obj1;
num2=(Integer)obj2;
else
num1=Integer.parseInt(obj1.toString());
num2=Integer.parseInt(obj2.toString());

if(num1>num2)
return 1;
else if(num1<num2)
return -1;
else
return 0;

else
return obj1.toString().compareTo(obj2.toString());

catch (SecurityException e)
e.printStackTrace();
catch (NoSuchFieldException e)
e.printStackTrace();
catch (IllegalArgumentException e)
e.printStackTrace();
catch (IllegalAccessException e)
e.printStackTrace();


return 0/*等于*/;



2,可以指定是升序还是降序

实例:

@Test
public void test_ListComparator()
List<Student>students=new ArrayList<Student>();
Student stu=null;
stu=new Student();
stu.setName("whuang");
stu.setAge(12);
stu.setScore(80);
students.add(stu);

stu=new Student();
stu.setName("rong");
stu.setAge(11);
stu.setScore(90);
students.add(stu);

stu=new Student();
stu.setName("zhu");
stu.setAge(15);
stu.setScore(100);
students.add(stu);
SortList<Student> sortList = new SortList<Student>();
sortList.Sort(students, "getAge", "asc");
System.out.println(students);



注意:sortList.Sort 的第二个参数是方法名,不是成员变量名.

核心代码

package com.common.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortList<E>
public void Sort(List<E> list, final String method, final String sort)
Collections.sort(list, new Comparator()
public int compare(Object a, Object b)
int ret = 0;
try
Method m1 = ((E) a).getClass().getMethod(method, null);
Method m2 = ((E) b).getClass().getMethod(method, null);
if (sort != null && "desc".equals(sort))// 倒序
ret = m2.invoke(((E) b), null).toString()
.compareTo(m1.invoke(((E) a), null).toString());
else
// 正序
ret = m1.invoke(((E) a), null).toString()
.compareTo(m2.invoke(((E) b), null).toString());
catch (NoSuchMethodException ne)
System.out.println(ne);
catch (IllegalAccessException ie)
System.out.println(ie);
catch (InvocationTargetException it)
System.out.println(it);

return ret;

);

参考技术A 用ArrayList.sort()函数即可本回答被提问者采纳

java 怎么将List里面数据排序

怎么将以下的List里面的数据排序
list.add(new ArrayList(2,5,6))
list.add(new ArrayList(2,4,6))
list.add(new ArrayList(2,6,6))
list.add(new ArrayList(2,1,6))
怎么按ArrayList里面的第二个数据进行排序啊

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


public class ArrayListOrder 

public static void main(String[] args) 
List<List<Integer>> list = new ArrayList<List<Integer>>();
List<Integer> arrayList1 = new ArrayList<Integer>();
arrayList1.add(2);
arrayList1.add(5);
arrayList1.add(6);
list.add(arrayList1);
List<Integer> arrayList2 = new ArrayList<Integer>();
arrayList2.add(2);
arrayList2.add(4);
arrayList2.add(6);
list.add(arrayList2);
List<Integer> arrayList3 = new ArrayList<Integer>();
arrayList3.add(2);
arrayList3.add(6);
arrayList3.add(6);
list.add(arrayList3);
List<Integer> arrayList4 = new ArrayList<Integer>();
arrayList4.add(2);
arrayList4.add(1);
arrayList4.add(6);
list.add(arrayList4);
for (List<Integer> tmpList : list) 
System.out.print(tmpList.get(1)+"   ");

System.out.println("");

//排序
Collections.sort(list,new Comparator<List<Integer>>()
public int compare(List<Integer> list1, List<Integer> list2) 
//比较每个ArrayList的第二个元素
if(list1.get(1)==list2.get(1))
return 0;
else if(list1.get(1)>list2.get(1))
return 1;
else
return -1;


);
for (List<Integer> tmpList : list) 
System.out.print(tmpList.get(1)+"   ");


参考技术A 如果你的list指的是awt里面的列表,可以通过add方法向控件末尾添加一条数据,如果想排序,可以先把列表中的数据全部获取,然后进行排序,清空列表,最后把排序的数据重新插入到列表中。 参考技术B 自己写个Comparator,然后调用Collections.sort(List<T> list,Comparator c); 方法
有什么不懂得欢迎追问!
参考技术C 首先 ArrayList(2,5,6)肯定是错的 有这样的构造方法吗?
我猜你可能是想new 一个数组吧

不知道你具体要排序什么只能给你一个排序的例子了,该例子排序的是Student对象,参考这个例子去看看你的需求该怎么实现应该很简单了吧
// 这是排序测试类
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
public class ComparatorTest

@SuppressWarnings( "unchecked" )
public static void main(String[] args)
List<Student> strs = new ArrayList<Student>();
strs.add(new Student(10, "zhangsan", new Date()));
strs.add(new Student(11, "lisi", new Date()));
strs.add(new Student(12, "wanger", new Date()));
strs.add(new Student(13, "mazi", new Date()));
strs.add(new Student(14, "xiaoming", new Date()));
strs.add(new Student(15, "xiaoming", new Date()));
strs.add(new Student(16, "dajun", new Date()));
Collections.sort(strs, new Comparator()
//排序的实现方法
@Override
public int compare(Object o1, Object o2)
Student s1 = (Student)o1;
Student s2 = (Student)o2;
// return s2.getName().compareTo(s1.getName()); // 根据Student的name字段排序

return s1.getAge() - s2.getAge(); // 根据Student的age字段排序


);

for(int i = 0; i < strs.size(); i++)
System.out.println(strs.get(i).getAge() + "--" + strs.get(i).getName() + "---" + strs.get(i).getBirthday());




// 这是被排序的对象
public class Student
public Student(int age, String name , Date birthday)
this.age = age;
this.name = name;
this.birthday = birthday;


private int age;

private String name;

private Date birthday;
public int getAge()
return age;

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

public String getName()
return name;

public void setName(String name)
this.name = name;

public Date getBirthday()
return birthday;

public void setBirthday(Date birthday)
this.birthday = birthday;

以上是关于java怎么对list进行排序的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么对日期列进行排序

JAVA中list排序问题

c# 怎么对一个类对象进行排序?

Java中如何对集合排序

如何对Scala中集合进行排序?

java 怎么将List里面数据排序