有一个List里头包涵了若干个HashMap,筛选出HashMap中的4条记录组成一个新List

有一个List里面包涵了若干个HashMap,筛选出HashMap中的4条记录组成一个新List
筛选规则:如果status为2的有四条以上记录则按projectId从大到小筛选4条,如果status=2不足,剩余部分从status=3中取,按projectId从大到小排序,以此类推。。(我自己实现了一个,但是效率不高,代码不大好看 = =)
list如下[{status=2, projectId=70}, {status=3, projectId=69},{status=3, projectId=68},{status=3, projectId=67},{status=4, projectId=66},{status=4, projectId=65},{status=5, projectId=64}]
------解决思路----------------------
数据就这么多吗
[{status=2, projectId=70}, {status=3, projectId=69},{status=3, projectId=68},{status=3, projectId=67},{status=4, projectId=66},{status=4, projectId=65},{status=5, projectId=64}]
这个效率也不是低。
------解决思路----------------------
这个应该不难, 使用java集合排序工具即可
Collections.sort()
------解决思路----------------------
先按照status排,相等的话再按照projectId排,(按照楼主的意思,如果有status<2的,直接排到最后即可),排好序后,去最前面的四个元素即可。
代码如下:
import java.util.*;  
class myMap implements Comparable<myMap>
{
public myMap(int k,int v){
key = k;
value = v;
}
int key;
int value;
public int compareTo(myMap map){
if(this.key<2) return 1; //如果有,直接排到最后
if(this.key != map.key)
return this.key-map.key;
else return map.value-this.value;
}
}
public class Test 
{  

public static void main(String args[])  
{
List<myMap> list = new ArrayList<myMap>();
list.add(new myMap(2,70));
list.add(new myMap(3,69));
list.add(new myMap(3,68));
list.add(new myMap(3,67));
list.add(new myMap(4,66));
list.add(new myMap(4,65));
list.add(new myMap(5,64));
Collections.sort(list);
int i=0;
for(myMap map:list){
i++;
System.out.println("{status="+map.key+",projectId="+map.value+"}");
if(i==4) break;
}
}