• Java代码Demo——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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    根据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()));
    
    • 1
    • 2
    • 3
    • 4

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

    //降序
    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
    • 2
    • 3
    • 4

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

    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)));
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    //降序
    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)));
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    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)));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

  • 相关阅读:
    RocketMQ的BrokerContainer
    快速排序 分数 25
    vue实现自动生成路由,非手动创建,含避坑点
    Java学习笔记:异常处理
    数据结构--线性表之顺序表
    普通本科大学生活避坑指南
    中标麒麟--国产操作系统-九五小庞
    基于粒子群算法的电力系统无功优化研究(IEEE14节点)(Matlab代码实现)
    Sharding sphere分库分表
    视频汇聚/视频云存储/视频监控管理平台EasyCVR启动时打印starting server:listen tcp,该如何解决?
  • 原文地址:https://blog.csdn.net/qq_45674493/article/details/134249446