Map根据key、value进行升序或降序

Goods测试类:

@Data
public Class Goods {
	//名称
	private String name;
	//编号
	private String gNo;
	//价格
	private BigDecimal price;
	//生产日期
	private LocalDate prodDate;

	public Goods(String name, String gNo, BigDecimal price, LocalDate prodDate) {
        this.name = name;
        this.gNo = gNo;
        this.price = price;
        this.prodDate = prodDate;
    }
}

初始化数据:(后续演示使用)

Goods val1 = new Goods("汉堡", "20231229153659", BigDecimal.valueOf(19.9), LocalDate.now().plusDays(1L));
Goods val2 = new Goods("饼干", "20231229154450", BigDecimal.valueOf(12.5), LocalDate.now().minusDays(3L));
Goods val3 = new Goods("辣条", "20231229155012", BigDecimal.valueOf(4.5), LocalDate.now().plusDays(10L));
Goods val4 = new Goods("薯片", "20231229161010", BigDecimal.valueOf(9.9), LocalDate.now().minusDays(5L));
Goods val5 = new Goods("可乐", "20231229183023", BigDecimal.valueOf(3.5), LocalDate.now());
List<Goods> goodsList = Arrays.asList(val1, val2, val3, val4, val5);

根据key进行升序和降序

  1. 使用TreeMap
//升序
Map<BigDecimal, Goods> map = new TreeMap<>();
goodsList.forEach(goods -> map.put(goods.getPrice(), goods));
map.forEach((key, value) -> System.out.println(value.toString()));

运行结果:
在这里插入图片描述

//降序
Map<BigDecimal, Goods> map = new TreeMap<>(Comparator.reverseOrder());
goodsList.forEach(goods -> map.put(goods.getPrice(), goods));
map.forEach((key, value) -> System.out.println(value.toString()));

运行结果:
在这里插入图片描述

  1. 使用HashMap
//升序
Map<BigDecimal, Goods> map = new HashMap<>();
goodsList.forEach(goods -> map.put(goods.getPrice(), goods));
List<BigDecimal> sortList = map.keySet().stream().sorted(BigDecimal::compareTo).collect(Collectors.toList());
sortList.forEach(key -> System.out.println(map.get(key)));

运行结果:
在这里插入图片描述

//降序
Map<BigDecimal, Goods> map = new HashMap<>();
goodsList.forEach(goods -> map.put(goods.getPrice(), goods));
List<BigDecimal> sortList = map.keySet().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
sortList.forEach(key -> System.out.println(map.get(key)));

运行结果:
在这里插入图片描述

Map根据Value排序

  1. 根据value的prodDate日期升序
Map<BigDecimal, Goods> map = new HashMap<>();
goodsList.forEach(goods -> map.put(goods.getPrice(), goods));
List<BigDecimal> sortList = map.values().stream()
		.filter(goods -> goods != null 
	            && goods.getProdDate() != null 
	            && goods.getPrice() != null)
		.sorted(Comparator.comparing(Goods::getProdDate, Comparator.nullsLast(LocalDate::compareTo)))
		.map(Goods::getPrice)
		.collect(Collectors.toList());
sortList.forEach(key -> System.out.println(map.get(key)));

运行结果
在这里插入图片描述

  1. 根据value的prodDate日期降序
Map<BigDecimal, Goods> map = new HashMap<>();
goodsList.forEach(goods -> map.put(goods.getPrice(), goods));
map.put(BigDecimal.ZERO, null);
List<BigDecimal> sortList = map.values().stream()
        .filter(goods -> goods != null 
                && goods.getProdDate() != null 
                && goods.getPrice() != null)
        .sorted(Comparator.comparing(Goods::getProdDate, Comparator.nullsFirst(Comparator.reverseOrder())))
        .map(Goods::getPrice)
        .collect(Collectors.toList());
sortList.forEach(key -> System.out.println(map.get(key)));

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值