java的map集合排序,value是个对象,要按照对象中的某个属性排序,怎么排啊?
3个回答
展开全部
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();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
排序输出来吗?
更多追问追答
追问
是啊大神,怎么弄?
追答
你举个例子我给你代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询