java - 对集合进行降序排序,但以升序方式等于值
问题描述
当我有一个不等于时,我试图对一个集合进行排序firstValue
,secondValue
我只是返回它的比较结果,它会以升序方式对其进行排序,但是当这些值等于时,我也想按名称以升序方式对其进行排序。一切正常,但是当我必须在这里按降序对集合进行排序时,firstValue
我secondValue
遇到了一个问题。当firstValue
和secondValue
相等时,我仍然想按名称以升序方式对其进行排序,但使用相反的顺序,它将按名称以降序方式排序。
这里是升序排序的代码:
prices.setPriceModels(prices.getPriceModels().stream().sorted((o1, o2) -> {
int compareResult = o1.getPrice().compareTo(o2.getPrice());
if (compareResult == 0) {
String firstCompareName = Optional.ofNullable(o1.getName()).orElse(StringUtils.EMPTY);
String secondCompareName = Optional.ofNullable(o2.getName()).orElse(StringUtils.EMPTY);
return firstCompareName.compareTo(secondCompareName);
}
return compareResult;
}).collect(Collectors.toList()));
主要目标是以降序方式对整个集合进行排序,如果某些值相等,则这些值应按名称以升序方式排序。是否可以实现reverseOrder()
流API的使用?或者有什么更好的解决方案?
解决方案
这个比较器怎么样?
prices.getPriceModels().stream().sorted(Comparator.comparing(PriceModel::getPrice).reversed() // using PriceModel's Price to sort in descending order
// for PriceModels with equal Prices, using PriceModel' name to sort in ascending order (with null values of name's treated to be less than any non-null value)
.thenComparing(PriceModel::getName, Comparator.nullsFirst(Comparator.naturalOrder())))
.collect(Collectors.toList())
推荐阅读
- firefox-addon - 开发插件/扩展来查看 PDF
- testing - 嵌入式系统 HMI 测试的机器人框架支持
- javascript - vue-agile 滑块 - 无法读取未定义的属性“classList”
- python - 使用 Nginx + Gunicorn 提供的 Flask 应用程序上的无限页面重新加载
- tfsbuild - TFS 中的 CI 管道,用于一个管道中的两个不同项目
- javascript - 将文本附加到同一单元格后,表格单元格中的 Indesign 字形消失了
- c# - 等待 client.queryasync 耗时太长
- ruby-on-rails - 如何在开发模式下检测与 Active Record 的名称冲突错误
- python - 切片 PySpark DataFrame 中列的所有值
- python - 将python pandas数据框转换为数组