问题描述
- 广告列表积分大小排序
-
举例: 我想在一个列表里添加两个积分墙广告列表A和B, 现在需要对A和B里面的列表广告进行排序,积分高的就排在前面,积分低的就排在后面,我现在的思路是将A和B添加到一个大列表C里,然后对C整个排序,但是具体不知道怎么写了,因为我是根据积分列表里面对象的积分值字段进行比较大小的,有点搞不懂,不会写了,下面是我们的代码案例,求大神帮忙看看 List alist = new ArrayList();
List blist = new ArrayList();
List clist = new ArrayList();clist .addAll(alist); clist .addAll(blist ); 现在对clist 进行排序: for (int i = 0; i < clist .size(); i++) { for (int j = i + 1; j < clist .size(); j++) { BaseResource br_1 = clist .get(i); //getPoint是获取结合对象列表的积分大小的 gerPoint(),说明在下面~ int data1 = getPoint(br_1); BaseResource br_2 = clist .get(j); int data2 = getPoint(br_2); //对积分point大小进行比较 if (data1 < data2) { ------------ 这里写不下去了----------- } } } private int getPoint(BaseResource br) { if (br.dataType == A_DataType) { ConnerObject connerObject= (ConnerObject) br.object; //返回A广告的分值大小 return aconnerObject.getPoints(); } else if (br.dataType == B_DataType) { Map<String, Object> map = (Map<String, Object>) br.object; //返回B广告的分值大小 return (Integer) map.get("number"); } return 0; }
解决方案
一、list排序,JDK官方类库有支持,既Collections.sort(List list)这个接口
这可以有两种做法
1、列表元素类implemensts Comparable接口,然后调用Collections.sort(List list),list即为有序
2、如果列表元素所属类不方便实现implemensts Comparable接口,那么可以重载Collections.sort,自定义比较方法,如下:
Collections.sort(listA, new Comparator<Object>() {
public int compare(Object arg0, Object arg1) {
//1)如果arg0和arg1的内部某个指定属性比较,arg0大于arg0,则返回1
//2)如果等于,返回0
//3)arg0小于arg0,返回-1
//4)假如要逆序排序,则1)和3)的返回值互换。
.....
}
});
二、用自己的方式,不用JDK类库的话。
1、那么最好先写一个compare方法,就与上面重载Collections.sort的那么compare方法一样;
2、列表元素a1和a2的大小比较,转为compare(a1,a2)返回值的比较;
3、可以用并归、快排、冒泡等等经典排序算法,自由使用。
解决方案二:
由于不方便,没有对代码进行调试,大概是这是这个样子。
Collections.sort(clist, new Comparator<BaseResource>() {
public int compare(BaseResource arg0, BaseResource arg1) {
int v0 = getPoint(arg0);
int v1 = getPoint(arg1);
if(v0 > v1) return 1;
else if(v0 == v1) return 0;
else -1;
}
});
时间: 2024-10-03 12:58:09