java 根據對象屬性排序

在項目中常常會遇到這楊的狀況,在數據中取到的 一個list集合咱們須要這個集合是按咱們想要的順序排列java

固然你說這能夠用數據庫order by 就能搞定,ok咱們說的用java代碼。若你已經選擇要使用數據庫了請繞行!sql

好吧竟然你選擇了往下繼續OK 就進入代碼吧,數據庫

ok以前我遇到這樣的需求的時候爲了簡單也使用過數據庫來作,後來數據庫查詢的sql愈來愈複雜以後就想用japache

ava來幫幫數據庫減輕一下壓力。"畢竟,壓力來自輪胎,就算跳到250P,FC 的馬力仍是太大,難以作到最大限度的飄逸"。ide

我靠這好像是「頭文字D」的臺詞吧!無論了!this

以前我也想本身實現一個,我去真的有點蛋疼,(首先遇到的問題就是,竟然要根據對象的屬性排序,那麼對象是不肯定的.net

,屬性也是不能肯定的,這必然就會用到反射,並且若是要按照對象都的字符串屬性排序那麼?????是否是有點隱隱的疼(-~-) );對象

最後仍是妥協了百度了一下,恰巧好看到這哥們的文章...blog

http://blog.csdn.net/djun100/article/details/11873281排序

 

 

package com.test;

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

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections.comparators.ComparatorChain;

public class MapSort {

public class Person implements Comparable<Person> {
private String name;
private Integer age;

public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

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

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}

@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
return 0;
}

}

public static void main(String[] args) {
//
// String[] names = new String[] { "張三丰", "張無忌","張無忌", "張無忌","張無忌", "張無忌","張無忌", "張信哲", "張張張", "周潤發", "馬雲", "牛強東", "馬化騰", "齊向東", "趙雲", "馬超", "什麼",
// "知乎", "www.baidu.com", "火狐", "微軟", "杭州", "2015春節" };

String[] names = new String[] { "張三丰", "張無忌","張無忌", "張無忌","張無忌", "張無忌","張無忌", "張信哲", "張張張" };
List<Person> perList = new ArrayList<Person>();
Comparator mycmp = ComparableComparator.getInstance();
mycmp = ComparatorUtils.nullLowComparator(mycmp); // 容許null
// mycmp = ComparatorUtils.reversedComparator(mycmp); // 逆序
Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINA);


ArrayList<Object> sortFields = new ArrayList<Object>();
sortFields.add(new BeanComparator("name", comparator)); // name正序 (主)
sortFields.add(new BeanComparator("age", mycmp)); // id逆序 (副)
ComparatorChain multiSort = new ComparatorChain(sortFields);

System.out.println("======排序前=====");
System.out.println(perList);
Collections.sort(perList, multiSort);
System.out.println("======排序hou=====");
System.out.println( perList );


// resMap.put("2", perListTwo);
// resMap.put("three", perListThree);
// resMap.put("4", perListFour);


}

}

相關文章
相關標籤/搜索