gpt4 book ai didi

java - 排序时如何忽略某个值,使其始终出现在排序列表的底部

转载 作者:行者123 更新时间:2023-11-30 06:20:45 25 4
gpt4 key购买 nike

我有一个项目列表,每个项目都有一个价格字段。有些商品的价格等于 999。排序时,我希望价格 == 999 的元素始终位于列表的底部,无论排序方向是升序还是降序。

我厌倦了下面的代码,它适用于从低到高(升序)排序,但在降序时不起作用。

Collections.sort(itemList, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
if(sort == 4){ // Low to High
return Double.compare(o1.getPrice(), o2.getPrice());
}else{ // High to Low
return Double.compare(o2.getPrice(), o1.getPrice());

}
}
});

最佳答案

对于升序:

Collections.sort(items, new Comparator<Item>()
{
@Override
public int compare(Item o1, Item o2)
{
if (o1.getPrice() == 999 && o1.getPrice() < o2.getPrice()) {
return 1;
}
if (o2.getPrice() == 999) {
return -1;
}
return Double.compare(o1.getPrice(), o2.getPrice());
}
});

对于降序:

Collections.sort(items, Collections.reverseOrder(new Comparator<Item>()
{
@Override
public int compare(Item o1, Item o2)
{
if (o1.getPrice() == 999 || o2.getPrice() == 999) {
return 1;
}
return Double.compare(o1.getPrice(), o2.getPrice());
}
}));

测试:

List<Item> items = new ArrayList<Item>();
items.add(new Item(10));
items.add(new Item(50));
items.add(new Item(1050));
items.add(new Item(999));
items.add(new Item(40));
items.add(new Item(999));
items.add(new Item(30));
items.add(new Item(1050));

输出:

升序

10.0
30.0
40.0
50.0
1050.0
1050.0
999.0
999.0

降序

1050.0
1050.0
50.0
40.0
30.0
10.0
999.0
999.0

关于java - 排序时如何忽略某个值,使其始终出现在排序列表的底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21353455/

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