Java列表元素自定义排序方式
作者:天航星
文章介绍了在Java开发中如何对列表元素进行自定义排序,通过实现`Comparator`接口并重写`compare`方法来指定自定义排序规则,示例展示了如何对汉字数字进行排序,并通过改变自定义顺序列表的元素添加顺序来实现倒序排序
Java列表元素自定义排序
在 Java 开发过程中,有时会遇到需要对列表中元素进行自定义的排序。
这样的排序往往不能由元素本身的特性(比如字符串长度、首字母顺序)判断,需要自己指定顺序。
比如对汉字的数字进行排序,他们的字符串长度都为 1,首字母顺序也不能得到预期的结果,因此需要自定义排序。
示例代码
public static void main(String[] args) { // 自定义顺序列表 List<String> customSortList = new ArrayList<>(); customSortList.add("一"); customSortList.add("二"); customSortList.add("三"); customSortList.add("四"); customSortList.add("五"); customSortList.add("六"); customSortList.add("七"); customSortList.add("八"); customSortList.add("九"); // 实际数据列表 List<String> realDataList = new ArrayList<>(); realDataList.add("三"); realDataList.add("九"); realDataList.add("八"); realDataList.add("四"); realDataList.add("五"); realDataList.add("二"); realDataList.add("一"); realDataList.add("六"); realDataList.add("七"); // 自定义排序 realDataList.sort((s1, s2) -> { // 获取s1在自定义顺序列表中的位置 int index1 = customSortList.indexOf(s1); // 获取s2在自定义顺序列表中的位置 int index2 = customSortList.indexOf(s2); // 如果字符串不在自定义顺序列表中,可以决定它们的位置 // 这里假设不在列表中的字符串应该排在最后 if (index1 == -1) { // 如果两个都不在列表中,则它们相等;否则,s1排在s2后面 return (index2 == -1) ? 0 : 1; } // s2不在列表中,所以s1排在s2前面 if (index2 == -1) { return -1; } // 否则,按照自定义顺序列表中的索引进行排序 return Integer.compare(index1, index2); }); System.out.println(Arrays.toString(realDataList.toArray())); }
打印结果
[一, 二, 三, 四, 五, 六, 七, 八, 九]
这样就得到了预期的结果。
如果需要改变排序规则(比如倒序),只需要改变自定义顺序列表的元素添加顺序即可。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。