JavaKeyPoint:Comparator 排序、中文生僻字排序

import com.ibm.icu.util.ULocale;

import java.math.BigDecimal;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;


public class Sort {
    public static void main(String[] args) {
        List<UserDTO> list = buildData();

        // 数字类型升序
        Comparator<UserDTO> ageSortAsc = Comparator.comparing(
                UserDTO::getAge, Comparator.nullsLast(Integer::compareTo));
        list.sort(ageSortAsc);

        // 数字类型降序 注意这里的 nullsFirst reverse之后
        Comparator<UserDTO> ageSortDesc = Comparator.comparing(
                UserDTO::getAge, Comparator.nullsFirst(Integer::compareTo)).reversed();
        list.sort(ageSortDesc);

        // 字符串转数字类型升序
        Comparator<UserDTO> idSortAsc = Comparator.comparing(
                UserDTO::getId, Comparator.nullsLast(Comparator.comparing(Long::valueOf)));
        list.sort(idSortAsc);

        // 字符串转BigDecimal类型降序
        Comparator<UserDTO> idSortDesc = Comparator.comparing(
                UserDTO::getId, Comparator.nullsFirst(Comparator.comparing(BigDecimal::new))).reversed();
        list.sort(idSortDesc);

        // 中文常见字升序 注意饕餮 Collator.getInstance(Locale.CHINESE))
        Comparator<UserDTO> chineseSortAsc = Comparator.comparing(
                UserDTO::getUsername, Comparator.nullsLast(Collator.getInstance(Locale.CHINESE)));
        list.sort(chineseSortAsc);

        // 中文常见字降序 注意饕餮 Collator.getInstance(Locale.CHINESE))
        Comparator<UserDTO> chineseSortDesc = Comparator.comparing(
                UserDTO::getUsername,
                Comparator.nullsFirst(Collator.getInstance(Locale.CHINESE))).reversed();
        list.sort(chineseSortDesc);

        // 中文生僻字升序 注意饕餮 com.ibm.icu.text.Collator.getInstance(ULocale.CHINESE))
        Comparator<UserDTO> chinaSortAsc = Comparator.comparing(
                UserDTO::getUsername,
                Comparator.nullsLast(com.ibm.icu.text.Collator.getInstance(ULocale.CHINESE)));
        list.sort(chinaSortAsc);

        // 中文生僻字降序 注意饕餮 com.ibm.icu.text.Collator.getInstance(ULocale.CHINESE))
        Comparator<UserDTO> chinaSortDesc = Comparator.comparing(
                UserDTO::getUsername,
                Comparator.nullsFirst(com.ibm.icu.text.Collator.getInstance(ULocale.CHINESE))).reversed();
        list.sort(chinaSortDesc);

        // 先按照中文排升序,中文相同再按照年龄升序
        list.sort(chinaSortAsc.thenComparing(ageSortAsc));
    }

    private static List<UserDTO> buildData() {
        List<UserDTO> list = new ArrayList<>();
        list.add(new UserDTO("22843982420984", "刘备", 50));
        list.add(new UserDTO("24224324443433", "关羽", 49));
        list.add(new UserDTO(null, "饕餮", 99));
        list.add(new UserDTO("83424242344432", "张飞", 47));
        list.add(new UserDTO("83424242344438", "张飞", 50));
        list.add(new UserDTO("22843982324243", "赵云", null));
        list.add(new UserDTO("45453242323324", null, 60));
        list.add(new UserDTO("24224324443488", "马超", 30));
        return list;
    }
}

中文生僻字排序依赖

<dependency>
    <groupId>com.ibm.icu</groupId>
    <artifactId>icu4j</artifactId>
    <version>67.1</version>
</dependency>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值