realCloudProviderAccountGroupDtos 是逻辑处理上的集合
想分别按照code 和scope两个属性,同时倒序排列,增加reversed(),去掉表示正序排列
realCloudProviderAccountGroupDtos = realCloudProviderAccountGroupDtos.stream()
.sorted(Comparator.comparing(CloudProviderAccountGroupDto::getCode).reversed().thenComparing(CloudProviderAccountGroupDto::getScope).reversed())
.collect(Collectors.toList());
也可以根据自己的实际情况,自由组合正序还是倒序排列,也可以增加想排序的属性即可。
上面的排序适用于两个属性都是字符串类型,如果有integer类型属性发现不可以直接使用,需要下面的方法:
list = list.stream()
.sorted(Comparator.comparing(RebateMonthRange::getCloudVendor).thenComparing(
(discountConfig1, discountConfig2) -> {
int diff = discountConfig1.getValidStartMonth().intValue() - discountConfig2.getValidStartMonth().intValue();
if (diff > 0) {
return 1;
}else if (diff < 0) {
return -1;
}
return 0; //相等为0
}
))
.collect(Collectors.toList());
一定注意,排序厚是重新生成了新的集合对象,原来的集合排序不会变化,所以使用时候注意下!
本文详细介绍了如何使用Java对集合进行排序,特别是针对复杂场景下的多属性复合排序,包括字符串类型属性和整数类型属性的排序。通过实例代码展示了如何使用Stream API的sorted方法结合Comparator进行倒序和正序的灵活组合,确保排序效果符合预期。同时,强调了排序操作会生成新的集合对象,原集合不会被改变,使用时需注意。
1万+





