• JDK8的lambda方式List多字段排序List.stream().sorted()


    JDK8的lambda方式List多字段排序List.stream().sorted()

    多字段排序
    List<HumanDetailDownloadVO> collect = dataList.stream().sorted(
            // 日期 倒序  
            Comparator.comparing(HumanDetailDownloadVO::getDate_str, Comparator.reverseOrder())
                    // 仓id 倒序 
                    .thenComparing(HumanDetailDownloadVO::getSite_code, Comparator.reverseOrder())
                    // 用户名升序  自定义比较器  拼音排序
                    .thenComparing(HumanDetailDownloadVO::getUser_name, new ChineseComparator())
                    // 大类code 升序
                    .thenComparing(HumanDetailDownloadVO::getPosition_code, Comparator.naturalOrder())
                    // 小类code 升序
                    .thenComparing(HumanDetailDownloadVO::getTask_code, Comparator.naturalOrder()))
            .collect(Collectors.toList());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    拼音排序:

    引入jar包:

    <!--        汉字拼音排序-->
            <dependency>
                <groupId>com.belerweb</groupId>
                <artifactId>pinyin4j</artifactId>
                <version>2.5.1</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    自定义比较器

    package XXXXXXXXXXXXXXXX;
    
    import net.sourceforge.pinyin4j.PinyinHelper;
    import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class ChineseComparator implements Comparator {
    
        HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
    
        @Override
        public int compare(String o1, String o2) {
    
            String pinyin1 = null;
            String pinyin2 = null;
            try {
                pinyin1 = PinyinHelper.toHanYuPinyinString(o1, pinyinOutputFormat, " ", true);
                pinyin2 = PinyinHelper.toHanYuPinyinString(o2, pinyinOutputFormat, " ", true);
                System.out.println("pinyin1=" + pinyin1 + ", pinyin2=" + pinyin2);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return pinyin1.compareTo(pinyin2);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    结束。

  • 相关阅读:
    语音芯片NV040D在电动车的防盗应用
    LeetCode(力扣)78. 子集Python
    Node.js学习(二)
    JVM判断对象是否存活之引用计数法、可达性分析
    把字符串转换成整数[考虑溢出]
    sed续与awk(粗糙版)
    微信小程序之后台首页交互
    线程池认识
    java-net-php-python-springboot学校在线作业考试系统计算机毕业设计程序
    shiro的实现认证
  • 原文地址:https://blog.csdn.net/wuxiaolongah/article/details/132668239