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;
}
});
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-07-17
用ArrayList.sort()函数即可本回答被提问者采纳

java如何让list按照list里面的某个字段排序,list里面的有很..._百度...
1. 使用Collections.sort方法或List的sort方法:Java提供了对List进行排序的功能,可以通过Collections.sort方法或List自身的sort方法实现。这些方法可以根据元素的自然顺序或者通过传递一个Comparator对象来自定义排序规则。2. 自定义Comparator实现:如果要按照List中的某个字段进行排序,需要创建一个实现了Compara...

java怎么将List里面数据排序
1. 创建一个学生实体类,该类包含姓名和年龄属性。2. 在实体类中实现Comparable接口,并重写compareTo方法。3. 在compareTo方法中,首先按照姓名升序比较,如果姓名相同,则按照年龄升序比较。4. 使用List类的sort(Comparator c)方法或Collections工具类的sort(List list)方法对列表进行排序。或者:1. 创...

java编程中对list集合进行排序的问题?
创建测试类,初始化列表并排序。生成随机学生数据,加入列表。执行排序操作。查看排序结果。示例排序结果:java List studentList = new ArrayList>();\/\/ 添加20个随机学生数据 Collections.sort(studentList);排序后列表展示:java \/\/ 排序后的学生列表 在上述示例中,所有学生的数据类型应统一为整型(int...

java对List去重并排序,如何快速地去掉两个
1. 首先,创建一个包含重复元素的整数列表:```java List list = Arrays.asList(5, 2, 2, 1, 3, 4);```2. 使用Stream API的`distinct()`方法去除列表中的重复元素:```java List distinctList = list.stream().distinct().collect(Collectors.toList());```3. 对去重后的列表进行排...

【Java基础】Java8 使用 stream().sorted()对List集合进行排序
多字段排序,如先降序按年龄,再升序按身高,可以组合多个Comparator:java List sortedByAgeThenHeight = students.stream().sorted(Comparator.comparingInt(Student::getAge).reversed(),Comparator.comparingDouble(Student::getHeight)).collect(Collectors.toList());最后,记得在使用这些代码时,尊重原创...

java 怎么将List里面数据排序
第一种:实体类自己实现比较 (实现comparable接口:public interface Comparable<T> ,里面就一个方法声明:public int compareTo(T o); )然后利用List类的sort(Comparator<? super E> c)方法或java.util.Collections工具类的sort(List<T> list) (其实里面就一句:list.sort(null); )进行排序:...

java 怎么将List里面数据排序
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>(...

java中的SORT怎么用
Java中的Sort(排序)通常指的是Collections.sort() 对 List 的排序,该排序方式有两种不同改的使用方法:第一种是list中的对象实现Comparable接口,如下 public class User implements Comparable<User>{ private String name;private Integer order;public String getName() { return name;} public void...

java 中 List<T>如何按照T中的一个字段排序?
可以通过以下工具类进行实现:import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;\/ List按照指定字段排序工具类 param <T> \/ public class ListSortUtil<T> { \/ param targetList 目标排序List param sortField...

java如何让list按照list里面的某个字段排序,list里面的有很多字段!_百 ...
Integer>>(); init(data); System.out.println("排序前:"); System.out.println(data); sort(data); System.out.println("排序后:"); System.out.println(data); } private static void sort(List<Map<String, Integer>> data) { Collections....

相似回答