Lambda表达式对HashMap按值排序

使用Lambda表达式对HashMap按value对象的时间属性进行降序排序

HashMap<Integer, User> userMap = new HashMap<>(); 
userMap.put(1,new User("张三",8,new Date().getTime())); 
userMap.put(2,new User("李四",10,new Date().getTime())); 
userMap.put(3,new User("王五",20,new Date().getTime())); 
userMap.put(4,new User("赵六",15,new Date().getTime())); 

List<Map.Entry<Integer, User>> list = new ArrayList<>(userMap.entrySet()); 

Collections.sort(
(a.getValue().getTime() !=null ? a.getValue().getTime().getTime() : 0) > 
(b.getValue().getTime() !=null ? b.getValue().getTime().getTime() : 0) ? -1:1 ); 

//list转map
userMap=list.stream()
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue, (oldValue,newValue) -> newValue, LinkedHashMap::new));

排序后list是排序后的结果,但如果还想返回排序后的userMap,则需要把list转化成Map,才能使排序生效

@Data 
public class User{ 
	private String name; 
	private int age; 
	private Date time; 
	public User(String name,int age,Date time){ 
		this.name = name; 
		this.age = age; 
		this.time = time; 
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值