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

参考技术A

正确的答案来了

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

本回答被提问者采纳
参考技术B 排序输出来吗?追问

是啊大神,怎么弄?

追答

你举个例子我给你代码

追问

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

追答

额,楼上已经有答案了

以上是关于java的map集合排序,value是个对象,要按照对象中的某个属性排序,怎么排啊?的主要内容,如果未能解决你的问题,请参考以下文章

java map 根据 map的value值进行排序

java8新特性:对map集合排序,根据key或者value操作排序(升序降序)

Map对象在JS中排序显示

python map按value排序

java初识集合(list,set,map)

系统运维系列 Map集合的时间value值按照先后顺序排序