java8 list 多字段含中文排序
java8 多字段排序(含中文)
关键是这一行:
result.sort(Comparator.comparing(CityNumber::getSum, Comparator.reverseOrder()).thenComparing((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getCityName(),o2.getCityName())));
实体代码如下:
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author yujiangcheng
* @date 2021/2/27 15:17
* @description CityNumber
*/
@Data
public class CityNumber{
@ApiModelProperty(value = "城市")
private String cityName;
@ApiModelProperty(value = "合计")
private int sum;
}
测试代码片段如下:
@Test
public void listTest() {
String str = "[{\"cityName\":\"成都\",\"sum\":1},{\"cityName\":\"昆明\",\"sum\":1},{\"cityName\":\"上海\",\"sum\":3},{\"cityName\":\"沈阳\",\"sum\":1},{\"cityName\":\"长沙\",\"sum\":1},{\"cityName\":\"厦门\",\"sum\":2},{\"cityName\":\"宁波\",\"sum\":1},{\"cityName\":\"重庆\",\"sum\":1},{\"cityName\":\"武汉\",\"sum\":3},{\"cityName\":\"天津\",\"sum\":1},{\"cityName\":\"杭州\",\"sum\":2},{\"cityName\":\"苏州\",\"sum\":3},{\"cityName\":\"南昌\",\"sum\":1},{\"cityName\":\"南京\",\"sum\":1},{\"cityName\":\"北京\",\"sum\":2}]";
List<CityNumber> result = JSON.parseArray(str, CityNumber.class);
result.sort(Comparator.comparing(CityNumber::getSum, Comparator.reverseOrder()).thenComparing((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getCityName(),o2.getCityName())));
for (ProjectCityStage cityStage : result) {
System.out.println(JSON.toJSONString(cityStage));
}
}
最终结果如下: