java字段排序
① java的list集合如何根据对象中的某个字段排序
下面的代码是根据学生年龄排序学生list 的一个例子:
importjava.util.ArrayList;
importjava.util.List;
classStudent{
privateStringname;
privateintage;
publicStudent(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
@Override
publicStringtoString(){
return"Perosn[name="+name+",age="+age+"]";
}
}
publicclassApp{
publicstaticvoidmain(String[]args){
List<Student>students=newArrayList<>();
students.add(newStudent("abc",12));
students.add(newStudent("bcd",20));
students.add(newStudent("cde",17));
students.add(newStudent("def",25));
students.add(newStudent("efg",15));
students.sort((x,y)->Integer.compare(x.getAge(),y.getAge()));
for(Studentstu:students){
System.out.println(stu);
}
}
}
运行结果:
② 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 排序字段(实体类属性名)
* @param sortMode 排序方式(asc or desc)
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public void sort(List<T> targetList, final String sortField, final String sortMode) {
Collections.sort(targetList, new Comparator() {
public int compare(Object obj1, Object obj2) {
int retVal = 0;
try {
//首字母转大写
String newStr=sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w","");
String methodStr="get"+newStr;
Method method1 = ((T)obj1).getClass().getMethod(methodStr, null);
Method method2 = ((T)obj2).getClass().getMethod(methodStr, null);
if (sortMode != null && "desc".equals(sortMode)) {
retVal = method2.invoke(((T) obj2), null).toString().compareTo(method1.invoke(((T) obj1), null).toString()); // 倒序
} else {
retVal = method1.invoke(((T) obj1), null).toString().compareTo(method2.invoke(((T) obj2), null).toString()); // 正序
}
} catch (Exception e) {
throw new RuntimeException();
}
return retVal;
}
});
}
}
Collections.sort(list.);//升序
③ java如何让list按照list里面的某个字段排序,list里面的有很多字段!
给你个例子看下
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Comparator;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
publicclass${
publicstaticvoidmain(String[]args){
List<Map<String,Integer>>data=newArrayList<Map<String,Integer>>();
init(data);
System.out.println("排序前:");
System.out.println(data);
sort(data);
System.out.println("排序后:");
System.out.println(data);
}
privatestaticvoidsort(List<Map<String,Integer>>data){
Collections.sort(data,newComparator<Map>(){
publicintcompare(Mapo1,Mapo2){
Integera=(Integer)o1.get("PRECOUNTOUT");
Integerb=(Integer)o2.get("PRECOUNTOUT");
//升序
returna.compareTo(b);
//降序
//returnb.compareTo(a);
}
});
}
privatestaticvoidinit(List<Map<String,Integer>>data){
Map<String,Integer>map=newHashMap<String,Integer>();
map.put("COUNTTICKET",1);
map.put("PRECOUNTOUT",2);
data.add(map);
map=newHashMap<String,Integer>();
map.put("COUNTTICKET",6);
map.put("PRECOUNTOUT",7);
data.add(map);
map=newHashMap<String,Integer>();
map.put("COUNTTICKET",8);
map.put("PRECOUNTOUT",5);
data.add(map);
map=newHashMap<String,Integer>();
map.put("COUNTTICKET",2);
map.put("PRECOUNTOUT",3);
data.add(map);
}
}
④ java怎样对集合按照实体类的字段排序
如果是实体类你可以通过数据库查询排序,这里就不多说了
如果已经得到结果了你可以通过编写一个对象比较器来实现排序
代码参考如下
package com.ljq.entity;
/**
* 运号单流程
*
* @author Administrator
*
*/
public class Step{
/** 处理时间 */
private String acceptTime = "";
/** 快件所在地点 */
private String acceptAddress = "";
public Step() {
super();
}
public Step(String acceptTime, String acceptAddress) {
super();
this.acceptTime = acceptTime;
this.acceptAddress = acceptAddress;
}
public String getAcceptTime() {
return acceptTime;
}
public void setAcceptTime(String acceptTime) {
this.acceptTime = acceptTime;
}
public String getAcceptAddress() {
return acceptAddress;
}
public void setAcceptAddress(String acceptAddress) {
this.acceptAddress = acceptAddress;
}
}
复制代码
二、实现Comparator接口
复制代码
package com.ljq.entity;
import java.util.Comparator;
import java.util.Date;
import com.ljq.util.UtilTool;
/**
* 对Step类进行排序
*
* @author Administrator
*
*/
public class StepComparator implements Comparator<Step>{
/**
* 如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;
*/
@Override
public int compare(Step o1, Step o2) {
Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
//对日期字段进行升序,如果欲降序可采用before方法
if(acceptTime1.after(acceptTime2)) return 1;
return -1;
}
}
复制代码
三、测试
复制代码
package junit;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
public class StepComparatorTest {
@Test
public void sort() throws Exception{
List<Step> steps=new ArrayList<Step>;
//对集合对象进行排序
StepComparator comparator=new StepComparator();
Collections.sort(steps, comparator);
if(steps!=null&&steps.size()>0){
for(Step step:steps){
System.out.println(step.getAcceptAddress());
System.out.println(step.getAcceptTime());
}
}
}
}