日期:2014-05-20  浏览次数:20708 次

如何对List<Map> 进行排序?
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?排序

------解决方案--------------------
自己才学水平不足,看到楼主题目思路如下:

遍历,把地址是总部的存入一个,内部按照序号排列;非总部的存入一个,存入时候直接排序存入;然后清空原来的把第1个,第2个分别存入原集合。

MAP的就记得treemap可以排序,新手实现困难,明天过了,后天上班时候我尝试写下,写出来了回头贴上来,写不出来我就继续学习……
------解决方案--------------------
既然总部是特例,就不如先把“总部”单独拿出来,将剩余数据排序。
遍历一遍data,取出总部,对剩余data用comparator按count逆序排序,再将总部的数据与排序好的数据合并
------解决方案--------------------

package com.nyohh.test1;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class DataSortTest
{

public List<SomeBody> process(List<SomeBody> data)
{
Map<Integer, String> map2 = new TreeMap(new MyComparator());// 这个是存存储总部的
for (SomeBody someBody : data)
{
if (someBody.getAdress() == "总部")
{
data.remove(someBody);
map2.put(someBody.getCount(), someBody.getAdress());
}
}

// 哥,这里有原来的data剩下的都是没有总部的,排序
// map2里面的都是含总部的,排序

// 然后把map2的添加到data的前面,这里我不熟,我要查手册搞,

return data;
}

public static void main(String[] args)
{
// public List<Map> process(List<Map> data)
// data的数据格式:[{count=1588847, adress=南京}, {count=973476, adress=南通}, {count=371132, adress=总部},……];

ArrayList<SomeBody> arrayList = new ArrayList<SomeBody>();
arrayList.add(new SomeBody(1588847, "南京"));
arrayList.add(new SomeBody(973476, "南通"));