• 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

    结束。

  • 相关阅读:
    WebSocket消息推送
    开源微信小程序商城源码PHP带后台管理——构建高效电商平台的基石
    导航集成测试
    天天都在说的用户画像到底该如何构建?看这篇就够了!
    linux高级编程(IO多路复用)
    docker常用命令大全
    transformer系列3---transformer结构参数量统计
    集群分布式储存
    VUE中watch的详细使用教程
    JavaIO进阶系列——BIO day1-2
  • 原文地址:https://blog.csdn.net/wuxiaolongah/article/details/132668239