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来排的?

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-15

正确的答案来了

附件里有代码。包含了你的头的要求把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();

}

本回答被提问者采纳
第2个回答  2013-11-16
排序输出来吗?追问

是啊大神,怎么弄?

追答

你举个例子我给你代码

追问

Map,User是一个对象,现在要按照User中的一个int类型的属性排序,怎么搞?

追答

额,楼上已经有答案了

相似回答