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进行升序和降序
- 使用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()));
运行结果:
- 使用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排序
- 根据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)));
运行结果
- 根据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)));
运行结果: