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>