字符串排序

174 阅读1分钟

字符串排序

字符串如果直接排序会无法按照拼音字母和长度排序成我们想要的结果,可以加上字符的排序器 例子代码如下:

```
package com.practise.zed.sort;

import lombok.Data;

import java.io.Serializable;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class SortTest {

    public static void main(String[] args) {

        List<UserVO> list = new ArrayList<>();
        UserVO vo1 = new UserVO();
        vo1.setId(1L);
        vo1.setName("张三丰");

        UserVO vo2 = new UserVO();
        vo2.setId(1L);
        vo2.setName("张三");

        UserVO vo3 = new UserVO();
        vo3.setId(1L);
        vo3.setName("李二牛");

        UserVO vo4 = new UserVO();
        vo4.setId(1L);
        vo4.setName("李二狗");

        list.add(vo1);
        list.add(vo2);
        list.add(vo3);
        list.add(vo4);

        // --------------List<UserVO>排序--------------------------
        
        // 直接字符串排序,字符串不能按照拼音字母和长度排序
        List<UserVO> sorted = list.stream().sorted(Comparator.comparing(UserVO::getName)).collect(Collectors.toList());

        // 实体按字符串字符器排序
        Collator com = Collator.getInstance(java.util.Locale.CHINA);
        list.sort(Comparator.comparing(UserVO::getName, com));

        System.out.println("直接字符串排序" + sorted);
        // 直接字符串排序[SortTest.UserVO(id=1, name=张三), SortTest.UserVO(id=1, name=张三丰), SortTest.UserVO(id=1, name=李二牛), SortTest.UserVO(id=1, name=李二狗)]

        System.out.println("实体按字符串字符器排序" + list);
        // 实体按字符串字符器排序[SortTest.UserVO(id=1, name=李二狗), SortTest.UserVO(id=1, name=李二牛), SortTest.UserVO(id=1, name=张三), SortTest.UserVO(id=1, name=张三丰)]

        // --------------List<String>排序--------------------------

        List<String> nameList = list.stream().map(UserVO::getName).collect(Collectors.toList());

        // name直接字符串排序
        List<String> nameSortList = nameList.stream().sorted().collect(Collectors.toList());

        // name按字符串字符器排序
        Collator com1 = Collator.getInstance(java.util.Locale.CHINA);
        nameList.sort(com1);

        System.out.println("name直接字符串排序" + nameSortList);
        // name直接字符串排序[张三, 张三丰, 李二牛, 李二狗]

        System.out.println("name按字符串字符器排序" + nameList);
        // name按字符串字符器排序[李二狗, 李二牛, 张三, 张三丰]


    }

    @Data
    public static class UserVO implements Serializable {

        private Long id;

        private String name;

    }

}
```

我们加上中文字符器后就可以实现字符串的排序了。

Collator com = Collator.getInstance(java.util.Locale.CHINA);

好了,文章已结束,感谢大家的浏览。