List<Category> result = categories.stream().sorted(
Comparator.comparing(Category ::getUseCount,(c1,c2) -> {return c2.compareTo(c1);})
.thenComparing(Category::getUpdateTime,(c1,c2) -> {return c2.compareTo(c1);})
).collect(Collectors.toList());
这是一段公司内的排序代码,业务的目的是根据category对象的useCount降序排列,如果useCount值相同,再根据updateTime字段降序排列,一眼看去这段代码似乎没有什么问题,但是仔细想一想就会发现这段代码的意思是对useCount字段排好序了之后再对于updateTime字段进行再一次排序。所以这样写是不符合业务逻辑的。改成如下:
result=categories.stream().sorted(Comparator.comparing(Category::getUseCount).thenComparing(Category::getUpdateTime).reversed()).collect(Collectors.toList());
程序是从左向右执行的,慢慢想一下就明白了
本文探讨了Java Stream API中Comparator使用的一个常见误区,通过对比分析了如何正确地实现对象属性的多级降序排序,避免了逻辑上的错误,提供了正确的代码示例。
1521

被折叠的 条评论
为什么被折叠?



