本文目錄一覽:
java 如何對自定義的對象進行排序
//把排序規則交給sort方法。該方法就回按照你自定義的規則進行排序java.util.Arrays.sort(users,new MyComparator());for (int i = 0; iusers.length; i++){System.out.println (users[i]);}}}class User{String name;int age ;public User(String name,int age){this.name = name;this.age = age;}public String toString(){return name+”:::”+age;}}class MyComparator implements Comparator{public int compare(Object obj1, Object obj2 ){User u1 = (User)obj1;User u2 = (User)obj2;if(u1.ageu2.age){return 1;}else if(u1.ageu2.age){return -1;}else{//利用String自身的排序方法。//如果年齡相同就按名字進行排序
Java中對象按照屬性排序
項目中經常需要用到比如地區列表按照中文的拼音首字母排序 但是有時候獲取到的地區列表是對象的形式 有地區id 地區名稱兩個屬性 這裡主要涉及到兩個技術點
對象按屬性排序 中文按拼音首字母排序 下面給出自己整理好的demo:
import java text Collator;
import java util ArrayList;
import java util Collections;
import java util Comparator;
import mons beanutils BeanComparator;
import llections ComparatorUtils;
import parators ComparableComparator;
import parators ComparatorChain;
public class CompareTipA {
private int id;
private String name;
private String age;
@SuppressWarnings( unchecked )
public static void main(String []args) {
ArrayListObject list = new ArrayListObject()
list add(new CompareTipA( 五 ))
list add(new CompareTipA( 六 ))
list add(new CompareTipA( 二 ))
list add(new CompareTipA( 四 ))
list add(new CompareTipA( 四 ))
list add(new CompareTipA( 一 ))
Comparator mycmp = ComparableComparator getInstance()
mycmp = ComparatorUtils nullLowComparator(mycmp)
//允許null
mycmp = ComparatorUtils reversedComparator(mycmp) //逆序
ArrayListObject sortFields = new ArrayListObject()
ComparatorObject parator=Collator getInstance(java util Locale CHINA)
sortFields add(new BeanComparator( name parator)) //name正序 (主)
sortFields add(new BeanComparator( id mycmp))
//id逆序 (副)
ComparatorChain multiSort = new ComparatorChain(sortFields)
Collections sort(list multiSort)
for (int i = ;ilist size() i++) {
System out println(list get(i))
//輸出 /*
[id= name=二 age= ]
[id= name=六 age= ]
[id= name=四 age= ]
[id= name=四 age= ]
[id= name=五 age= ]
[id= name=一 age= ]*/
}
}
public CompareTipA(int id String age String name) {
this id = id;
this name = name;
this age = age;
}
public int getId() {
return this id;
}
public void setId(int id) {
this id = id;
}
public String getName() {
return this name;
}
public void setName(String name) {
this name = name;
}
//
public int pareTo(Object o) { //
return pare(this o) // }
public String toString() {
return [id= + this id + name= + this name + age= + this age + ] ;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this age = age;
} }
注意 需要導入的三個包 mons beanutils jar
mons collections jar
mons logging jar
lishixinzhi/Article/program/Java/hx/201311/25790
Java中怎麼給一個對象排序
Comparable 是一個自身以前支持自比擬的(如String ,Integer) 的接口 Comparator 可以說是一個 自用的比擬器 當對象自身 不支持自排序和自比擬函數的時辰 咱們可以議決完成Compartor 來比擬兩對象的大小 Comparable 是一個比擬通用的接口 用戶可以議決他完成 排序功用 而Comparator 可以看作一種算法 一種設計方式 (可以看作是一個戰略方式 就是不改動對象自身,而用一個戰略對象改動對象行為) Comparable 相比擬較固定 與詳細類綁定 , Comparator 比擬靈敏 可以與任何須要完成功用的類 綁定 Comparable 可以說是 靜態綁定 Comparator 可以說是靜態綁定 Comparable 此接口強行對完成它的每個類的對象執行全體排序。此排序被稱為該類的自然排序,類的 compareTo 方法被稱為它的自然比擬方法。 完成此接口的對象列表(和數組)可以議決 Collections.sort(和 Arrays.sort)執行自動排序。完成此接口的對象可以用作有序映射表中的鍵或有序集合中的元素,無需指定比擬器。 關於類 C 的每一個 e1 和 e2 來說,當且僅當 (e1.compareTo((Object)e2) == 0) 與 e1.equals((Object)e2) 具有類似的布爾值時,類 C 的自然排序才叫做與 equals 一致。留意,null 不是任何類的實例,即便 e.equals(null) 前往 false,e.compareTo(null) 也會拋出 NullPointerException。 劇烈推薦(雖然不是必需的)使自然排序與 equals 一致。這是由於在運用其自然排序與 equals 不一致的元素(或鍵)時,沒有顯式比擬器的有序集合(和有序映射表)行為表現“怪異”。尤其是,這樣的有序集合(或有序映射表)違犯了依據 equals 方法定義的集合(或映射表)的慣例協議。 而Comparator 比擬函數強行對某些對象 collection 執行全體排序。可以將 Comparator 傳遞給 sort 方法(如 Collections.sort),從而准許在排序順序上完成精確控制。還可以運用 Comparator 來控制某些數據結構(如 TreeSet 或 TreeMap)的順序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/307527.html