Java List重载Collections.sort方法排序

来源:互联网 发布:java 源代码文件 混淆 编辑:程序博客网 时间:2024/06/05 03:19

         最近做游戏中的背包系统中的一个快速整理接口,其实就是按照物品的几个指定特性进行排序后更新背包中物品位置。找了一下,发现重载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<ItemObject> itemObjects = new ArrayList<ItemObject>();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<ItemObject>() {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:\Users\Administrator\Desktop>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

0 0
原创粉丝点击