java的map集合排序,value是个对象,要按照对象中的某个属性排序,怎么排啊?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的map集合排序,value是个对象,要按照对象中的某个属性排序,怎么排啊?相关的知识,希望对你有一定的参考价值。
import java.util.Comparator;import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import java.util.Map.Entry;
public class TestSort
public static void main(String[] args)
//必须使用TreeMap(HashMap实现不了此功能)
//实例化Dog,需要使用这个对象作为TreeMap构造方法参数
Dog dog=new Dog();
Map<Object,Object> map=new TreeMap(dog);
//随机生成40个dog对象
Random random=new Random();
for(int i=0;i<40;i++)
//年龄范围随机生成(1~100之间)
dog=new Dog(random.nextInt(100)+1);
map.put(dog, dog);
//以此输出年龄
for(Entry<Object, Object> entry:map.entrySet())
dog=(Dog) entry.getValue();
System.out.println(dog.getAge());
/**
* 必须实现“Comparator”接口
* 以age属性进行排序(当然也可以根据多个属性组合排序,此处不再演示)
*/
class Dog implements Comparator<Dog>
private int age;
public Dog()
public Dog(int age)
this.age=age;
/**
* 按年龄升序
*/
public int compare(Dog o1, Dog o2)
if(o1.age<o2.age)
return -1;
else if(o1.age==o2.age)
return 0;
else
return 1;
public int getAge()
return age;
public void setAge(int age)
this.age = age;
以上是代码部分,写的不好的地方请见谅!
追问我头儿告诉我说,要把map集合放到list集合里,这样是怎么弄的啊?
还有如果dog中有好多属性,我怎么确定是以age来排的?
正确的答案来了
附件里有代码。包含了你的头的要求把map放到list中。
这两天,我也经常使用集合
多谢啊,要是age一样,我再用name排怎么加?
追答如果name要排序只需要在内部类中判断一下就好了啊
参考代码如下。你可以参考
if(o2.getValue().age!=o1.getValue().age)
return o2.getValue().age - o1.getValue().age;
else
//按第一个字符排序
return o1.getValue().name.charAt(0) - o2.getValue().name.charAt(0);
/ /或者按字符长度排序。你在这里指定返回的规则啊
//return o1.getValue().name.length() - o2.getValue().name.length();
是啊大神,怎么弄?
追答你举个例子我给你代码
追问Map,User是一个对象,现在要按照User中的一个int类型的属性排序,怎么搞?
追答额,楼上已经有答案了
以上是关于java的map集合排序,value是个对象,要按照对象中的某个属性排序,怎么排啊?的主要内容,如果未能解决你的问题,请参考以下文章