public List<Map> process(List<Map> data)
data的数据格式:
[{count=1588847, adress=南京}, {count=973476, adress=南通}, {count=371132, adress=总部},……];List中有多个Map,每个Map中只有count、adress 2个键值对。要求传入一个无序的data list,返回的按count倒序,期中如果adress出现"总部",那么就把总部在第一条,其他城市在总部之后按count倒序排列。
我是用2个Comparator自定义排序做的,第一个按count倒序排,然后再把得到的list 按adress排,结果adress排是对的了,但是count排就没了。 总之不好结合一起用。求指教,在线等。Comparator List 排序
data的数据格式:
[{count=1588847, adress=南京}, {count=973476, adress=南通}, {count=371132, adress=总部},……];List中有多个Map,每个Map中只有count、adress 2个键值对。要求传入一个无序的data list,返回的按count倒序,期中如果adress出现"总部",那么就把总部在第一条,其他城市在总部之后按count倒序排列。
我是用2个Comparator自定义排序做的,第一个按count倒序排,然后再把得到的list 按adress排,结果adress排是对的了,但是count排就没了。 总之不好结合一起用。求指教,在线等。Comparator List 排序
遍历一遍data,取出总部,对剩余data用comparator按count逆序排序,再将总部的数据与排序好的数据合并
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MdPluginsManager {
/**
* 多维插件入口
*
* @param
* @return
* @author Andsion
*/
public List<Map> process(List<Map> data, String arg, String xField,
List<String> yFields) {
List<Map> returnList = new ArrayList<Map>(); // 调用该方法返回的List
List<Map> dsList = new ArrayList<Map>(); // 用于保存非集团本部的List
// 1.判断List中是否有本部,如果有则将其加入到本部list中
for (int i = 0; i < data.size(); i++) {
if (data.get(i).get("REGION_OUT").toString().indexOf("本部") > 0) {
// 如果存在集团本部数据、即将其先加入返回的List中,达到数据在上的效果。
returnList.add(data.get(i));
} else {
// 非集团本部的数据保存在地市的list中,后面做排序使用
dsList.add(data.get(i));
}
}
/* 地市list排序前输出
* for (int i = 0; i < dsList.size(); i++) {
* System.out.println("地市List排序前---" +
* dsList.get(i).get("REGION_OUT").toString() + "-----" +
* dsList.get(i).get("USERCOUNTS").toString()); }
*/
// 地市list按USERCOUNTS降序排列
Collections.sort(dsList, new Comparator<Map>() {
public int compare(Map o1, Map o2) {
return (Integer) o1.get("USERCOUNTS") > (Integer) o2
.get("USERCOUNTS") ? ((Integer) o1.get("USERCOUNTS") == (Integer) o2
.get("USERCOUNTS") ? 0 : -1) : 1;
}
}); /* 地市list排序后输出
* for (int i = 0; i < dsList.size(); i++) {
* System.out.println("ds排序后---" +
* dsList.get(i).get("REGION_OUT").toString() + "-----" +
* dsList.get(i).get("USERCOUNTS").toString()); }
*/ // 地市list排序完成后,再加入到返回的list中
returnList.addAll(dsList);
return returnList;
} public void sort(List<Map<String, Object>> list) {
Collections.sort(list, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
return (Integer) o1.get("USERCOUNTS") > (Integer) o2
.get("USERCOUNTS") ? ((Integer) o1.get("USERCOUNTS") == (Integer) o2
.get("USERCOUNTS") ? 0 : -1) : 1;
}
});
} }
谢谢各位,解决了!