gpt4 book ai didi

java - 方法预期通过比较器比较两个字段,但仅按 1 排序

转载 作者:行者123 更新时间:2023-12-02 11:55:54 26 4
gpt4 key购买 nike

我正在寻找一种实现比较器的方法,用于按名称和价格比较产品。我在这里找到了很多有用的信息How to sort by two fields in Java?并实现了我的比较器。

它比较产品名称正确,但价格顺序不正确。 我希望名称按字母顺序排列,价格按升序排列。怎么可能做到这一点呢?我在这里缺少什么?

这是我到目前为止所做的:

按名称和价格进行比较的方法

public static List<BaseProduct> compareNamesAndPrices(List<BaseProduct> baseProducts) {
Comparator<BaseProduct> productComparator = Comparator.comparing(BaseProduct::getProductName)
.thenComparing(Comparator.comparing(BaseProduct::getPrice));
return baseProducts.stream()
.sorted(productComparator)
.collect(Collectors.toList());
}

测试方法

List<BaseProduct> sortedProductsList = StaticUtils.compareNamesAndPrices(products);
for (BaseProduct product : sortedProductsList) {
System.out.println(String.format("Product name: %s -> Price: %s", product.getProductName(), product.getPrice().toString()));
}

我得到以下输出:

Product name: Bananas  -> Price: 45
Product name: Galaxy 7 phone -> Price: 400
Product name: Xiaomi Mi5 -> Price: 370

最佳答案

当您在前一个比较器之上使用 thenComparing 组合比较器时,只有当且仅当前一个比较器通过给定的排序键找到至少两个相等的元素时,才会考虑它。

查看您的输出,没有具有相同名称的产品,因此根本不考虑价格。

考虑到您已经提到:

I'm expecting to have names in alphabetical order and prices in ascending order.

事实上,简单的事实是,如果不丢失产品名称的顺序或奖品的顺序,就不可能做到这一点。

您能做的最好的事情就是在适当的时候按名称或奖品对产品进行排序。

关于java - 方法预期通过比较器比较两个字段,但仅按 1 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47606533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com