返回最大的N个值
//返回最大n
static List<AlarmMessage> getTopN(int n,List<AlarmMessage> list){
if(list == null || list.isEmpty() || n < 1){
return new ArrayList<AlarmMessage>();
}
if(n > list.size()){
n = list.size();
}
try{
//选出Id最大的n条,也就是最新的n条message
AlarmMessage[] arr = new AlarmMessage[n];
for(AlarmMessage alarmMessage:list){
if(arr[0] == null){//数组还没填满
if(arr[arr.length-1] == null){//空数组
arr[arr.length-1] = alarmMessage;//放在最后
continue;
}else{//非空数组
for(int j = 0;j<arr.length-1;j++){//整体往前移动一格
arr[j] = arr[j+1];
}
arr[arr.length-1] = null;//最后一个设置为null
}
}
for(int i=arr.length-1;i>-1;i--){
if(arr[i] == null){
if(i == arr.length-1){//最后一个为null,说明是数组长度没满,向前移位了一格
}else{//碰到null,说明是最大值
arr[i+1] = alarmMessage;
break;
}
}else{
if(alarmMessage.getId() > arr[i].getId()){//比当前位置的值要大
if(i == 0){//比第一个大
if(i < arr.length-1){
arr[i+1] = arr[i];
}
arr[0] = alarmMessage;
break;
}else if(i == arr.length-1){//跟数组中最后一个(也就是最小)比较
//不做处理,继续往前查找
}else if(i < arr.length-1){
arr[i+1] = arr[i];//让当前位置的对象覆盖后面的
}
}else{//比当前位置的对象小,结束
if(i < arr.length-1){//前面的都大,到此结束
arr[i+1] = alarmMessage;
break;
}else if(i == arr.length-1){//比最后一个还小
break;
}
}
}
}
}
return Arrays.asList(arr);
}catch (Exception e){
return new ArrayList<AlarmMessage>();
}
}