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:\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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值