读书人

怎么对Listlt;Mapgt; 进行排序

发布时间: 2013-08-01 15:23:18 作者: rapoo

如何对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, "南通"));


arrayList.add(new SomeBody(371132, "总部"));

}
}

/**
* 按count倒序排列
*/
class MyComparator implements Comparator<SomeBody>
{

@Override
public int compare(SomeBody o1, SomeBody o2)
{
return o2.getCount() - o1.getCount();
}

}

class SomeBody
{
public Integer count;
public String adress;

public SomeBody(Integer count, String adress)
{
this.count = count;
this.adress = adress;
}

public Integer getCount()
{
return count;
}

public void setCount(Integer count)
{
this.count = count;
}

public String getAdress()
{
return adress;
}

public void setAdress(String adress)
{
this.adress = adress;
}

}



草样,我先回去的,老婆打电话了的!

读书人网 >J2SE开发

热点推荐