使用LinkedHashMap和Comparator排序器对Map的排序抛砖引玉
我现在有一个需求,我需要一个map存放 一组person类的信息,包括name,level和age,并且我需要排序,排序之后我可能还要根据name来修改任意person的值,我想过用arrayList,但是arrayList取任意值不方便,需要循环取值,map也不行,map不能排序,
maptree我试过,好像只能按照key值排序,我的key值是用来存放name的,我需要的排序方式是level和age
在网上找了几个小时资料后,我整理出一个方法,使用Map赋值,然后map转成arraylist,arraylist通过Comparator排序,然后再循环给到LinkedHashMap.
网上还有一种方法是用treemap, 先把key和value值反过来,用Preson类做key值,使用key值排序之后再反转treemap
求哪个方法靠谱些,或者高手们给我个好解决方法。
这是Person
这是转换
测试:
测试的结果是:
Json|1|20|
Divid|1|25|
Peter|2|22|
Molic|3|22|
Alex|3|23|
Aglia|3|27|
maptree我试过,好像只能按照key值排序,我的key值是用来存放name的,我需要的排序方式是level和age
在网上找了几个小时资料后,我整理出一个方法,使用Map赋值,然后map转成arraylist,arraylist通过Comparator排序,然后再循环给到LinkedHashMap.
网上还有一种方法是用treemap, 先把key和value值反过来,用Preson类做key值,使用key值排序之后再反转treemap
求哪个方法靠谱些,或者高手们给我个好解决方法。
这是Person
public class Person {
/**等级*/
private int level;
/**姓名*/
private String name;
/**年龄*/
private int age;
public Person(int type,String name,int age) {
this.name = name;
this.level = type;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
}
这是转换
public static LinkedHashMap<String, Person> getOrder(Map<String, Person> map){
List<Map.Entry<String, Person>> infoIds =new ArrayList<Map.Entry<String, Person>>(map.entrySet());
//排序
Collections.sort(infoIds, new Comparator<Map.Entry<String, Person>>() {
public int compare(Map.Entry<String, Person> o1, Map.Entry<String, Person> o2) {
Person p1 = (Person) o1.getValue();
Person p2 = (Person) o2.getValue();;
if (p1.getLevel() == p2.getLevel()){
return p1.getAge() -p2.getAge();
}else{
return p1.getLevel() - p2.getLevel();
}
}
});
/*转换成新map输出*/
LinkedHashMap<String, Person> newMap = new LinkedHashMap <String, Person>();
for(Map.Entry<String,Person> entity : infoIds){
newMap.put(entity.getKey(), entity.getValue());
}
return newMap;
}
测试:
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, Person> map = new HashMap<String, Person>();
map.put("Json", new Person(1,"Json", 20));
map.put("Peter", new Person( 2,"Peter",22));
map.put("Divid", new Person(1,"Divid", 25));
map.put("Aglia", new Person(3,"Aglia", 27));
map.put("Alex", new Person(3,"Alex", 23));
map.put("Molic", new Person(3,"Molic", 22));
LinkedHashMap<String, Person> newMap = getOrder(map);
Iterator<Entry<String, Person>> iter = newMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, Person> entry = (Map.Entry<String, Person>) iter.next();
System.out.println( entry.getValue().getName() + "|" + entry.getValue().getLevel() + "|"
+ entry.getValue().getAge()+ "|");
}
}
测试的结果是:
Json|1|20|
Divid|1|25|
Peter|2|22|
Molic|3|22|
Alex|3|23|
Aglia|3|27|
...全文
相关推荐
Java Map 按key排序和按Value排序的实现方法
**LinkedHashMap**: - 如果你需要保持插入顺序或者访问顺序的Map,可以使用`LinkedHashMap`。
java如何对map进行排序详解(map集合的使用)
LinkedHashMap也是非同步的。二、Map排序1. 使用TreeMap进行排序:TreeMap默认按key的自然顺序排序,如果需要自定义排序,可以通过传入自定义的Comparator实现。
对Map按key和value分别排序
"对 Map 按 key 和 value 分别排序"摘要:本文主要介绍了 Map 按 key 和 value 分别排序的方法,包括使用 TreeMap 的 key 排序和 value 排序两种方式。
Java Map 按照Value排序的实现方法
**LinkedHashMap**: - 如果你希望保持插入顺序,可以使用LinkedHashMap。但请注意,这仅保持插入顺序,而不是按照Value的自然顺序或自定义排序。
对Map的key和value进行排序
对Map中的value进行排序对Map中的value进行排序可以使用TreeMap和Comparator来实现。


Java SE
