java過載實現排序_Java List過載Collections.sort方法排序

最近做遊戲中的背包系統中的一個快速整理介面,其實就是按照物品的幾個指定屬性進行排序後更新背包中物品位置。找了一下,發現過載Collections.sort方法可以實現對List中的資料根據其儲存的資料表欄位進行排序。其實還有一種方法,就是對List中物件實現Compareable介面。這種方法沒有使用。

需要排序的規則是先按型別排(升序),型別相同的話看等級(降序,等級高的在前),等級相同的看品質(降序,數值越大品質越高),品質相同按照取得時間排序(取得時間早的在前)。

由於只是簡單的測試,所以所有的程式碼都寫到一個檔案中了。在實際應用時,List中存放的是物品表的對映類物件。排序後需要重新更新表中物品的位置欄位。

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

public class TestCollectionSort {

public static void main(String[] args) {

List itemObjects = new ArrayList();

ItemObject itemObject1 = new ItemObject();

itemObject1.setItemType(1);

itemObject1.setLevel(6);

itemObject1.setQuality(4);

itemObject1.setObtainDate(1234);

itemObjects.add(itemObject1);

ItemObject itemObject2 = new ItemObject();

itemObject2.setItemType(3);

itemObject2.setLevel(6);

itemObject2.setQuality(4);

itemObject2.setObtainDate(1234);

itemObjects.add(itemObject2);

ItemObject itemObject3 = new ItemObject();

itemObject3.setItemType(1);

itemObject3.setLevel(6);

itemObject3.setQuality(3);

itemObject3.setObtainDate(1265);

itemObjects.add(itemObject3);

ItemObject itemObject4 = new ItemObject();

itemObject4.setItemType(2);

itemObject4.setLevel(4);

itemObject4.setQuality(3);

itemObject4.setObtainDate(1265);

itemObjects.add(itemObject4);

ItemObject itemObject5 = new ItemObject();

itemObject5.setItemType(1);

itemObject5.setLevel(6);

itemObject5.setQuality(3);

itemObject5.setObtainDate(1234);

itemObjects.add(itemObject5);

//列印出初始結果

System.out.println("初始情況:");

for (ItemObject i : itemObjects) {

System.out.println("type:" + i.getItemType() + "; " +

"level:" + i.getLevel() + "; " +

"quality:" + i.getQuality() + "; " +

"date:" + i.getObtainDate());

}

//排序

Collections.sort(itemObjects, new Comparator() {

public int compare(ItemObject itemObject1, ItemObject itemObject2) {

int type = itemObject1.getItemType() - itemObject2.getItemType();

if (type == 0) {//物品型別相同

int level = itemObject1.getLevel() - itemObject2.getLevel();

if (level == 0) {//等級相同

int quality = itemObject1.getQuality() - itemObject2.getQuality();

if (quality == 0) {//品質

return itemObject1.getObtainDate() - itemObject2.getObtainDate();//獲得時間按照升序排列,早獲得的在前

} else {

return -quality;

}

} else {//物品等級降序排列,等級高的在前

return -level;

}

} else {//物品型別升序(裝備:1 > 耗用品:2 > 道具:3 > 材料:4)

return type;

}

}

});

//列印排序後的結果

System.out.println("排序後:");

for (ItemObject i : itemObjects) {

System.out.println("type:" + i.getItemType() + "; " +

"level:" + i.getLevel() + "; " +

"quality:" + i.getQuality() + "; " +

"date:" + i.getObtainDate());

}

}

}

class ItemObject {

private int level;

private int quality;//白 1 綠 2 籃 3 紫 4 金 5

private int itemType;

private int obtainDate;//獲得物品時間

public int getObtainDate() {

return obtainDate;

}

public void setObtainDate(int obtainDate) {

this.obtainDate = obtainDate;

}

public int getItemType() {

return itemType;

}

public void setItemType(int itemType) {

this.itemType = itemType;

}

public int getLevel() {

return level;

}

public void setLevel(int level) {

this.level = level;

}

public int getQuality() {

return quality;

}

public void setQuality(int quality) {

this.quality = quality;

}

}

測試結果:

C:UsersAdministratorDesktop>java TestCollectionSort 初始情況: type:1; level:6; quality:4; date:1234 type:3; level:6; quality:4; date:1234 type:1; level:6; quality:3; date:1265 type:2; level:4; quality:3; date:1265 type:1; level:6; quality:3; date:1234 排序後: type:1; level:6; quality:4; date:1234 type:1; level:6; quality:3; date:1234 type:1; level:6; quality:3; date:1265 type:2; level:4; quality:3; date:1265 type:3; level:6; quality:4; date:1234