java8 list 多字段排序(含中文)

这篇博客展示了如何使用Java8对包含中文城市名和数字的列表进行排序。通过Comparator的组合,首先按数字字段降序排序,然后按中文城市名使用Locale.CHINA进行升序排序。测试代码中,对一个JSON字符串转换成CityNumber对象的列表进行排序,并打印结果。

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));
        }
    }

最终结果如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值