如何对Map集合里的对象进行排序

今天看了一道面试题就是 如何根据Map集合里的User对象的age进行升序或降序进行排列

这里记录一下

大家都知道Map集合是键值对形式存储数据的,本身就没有顺序,那么如何排序呢?(圈重点)这里要考

下面 给出一个案例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Test3 {
	public static void main(String[] args) {
		Map<Integer, User> map = new HashMap<Integer, User>();
		map.put(1, new User("Tom", 12));
		map.put(2, new User("Jerry", 15));
		map.put(3, new User("jack", 21));
		map.put(4, new User("Bob", 10));
		map.put(5, new User("Locy", 18));

		println(map);//重点来了

	}
        
	public static Map<Integer,User> println(Map<Integer,User> map) {
		System.out.println("map---"+map);
		Set< Entry<Integer, User>> entrySet = map.entrySet();
		
		List<Entry<Integer, User>> list = new ArrayList<Entry<Integer, User>>(entrySet);
		System.out.println("list---"+list);
		
		Collections.sort(list, new Comparator<Entry<Integer, User>>() {

			@Override
			public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {
				return o1.getValue().getAge()-o2.getValue().getAge();
			}
		});
		
		LinkedHashMap<Integer, User> link = new LinkedHashMap<Integer, User>();

		System.out.println("-----------------------------");
		for (Entry<Integer, User> entry : list) {
			link.put(entry.getKey(), entry.getValue());
		}
		System.out.println(link);
		return link;
	}
}

我们可以看一下 我们的控制台打印的东东

这里我进行了格式的改动------很明显 我们想要的顺序已经出来了

控制台输出结果是啥呢 
map---{1=User [name=Tom, age=12],
       2=User [name=Jerry, age=15],
       3=User [name=jack, age=21],
       4=User [name=Bob, age=10], 
       5=User [name=Locy, age=18]}

---------转化之后的形式
list---[1=User [name=Tom, age=12],
        2=User [name=Jerry, age=15], 
        3=User [name=jack, age=21], 
        4=User [name=Bob, age=10], 
        5=User [name=Locy, age=18]]

-----------------------------最终结果
{4=User [name=Bob, age=10], 
 1=User [name=Tom, age=12], 
 2=User [name=Jerry, age=15],
 5=User [name=Locy, age=18],
 3=User [name=jack, age=21]}

那么到这里 就完成了 有好奇的小伙伴就会问了 ?

你这是升序  那我想要降序排列 怎么办   问得好!!

仔细理解一下转化的流程 那么 也就不是难事了,多思考,多学习,希望每个和我一样积极学习的都能做大佬

虽然我不是大佬  哈哈哈

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值