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

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

多字段排序

java 复制代码
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());

拼音排序:

引入jar包:

java 复制代码
<!--        汉字拼音排序-->
        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version>
        </dependency>

自定义比较器:

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<String> {

    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);
    }

}

结束。

相关推荐
yuanbenshidiaos6 分钟前
C++----------函数的调用机制
java·c++·算法
是小崔啊23 分钟前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
黄公子学安全32 分钟前
Java的基础概念(一)
java·开发语言·python
liwulin050633 分钟前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc38 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Yuan_o_38 分钟前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Oneforlove_twoforjob42 分钟前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
数据小小爬虫1 小时前
利用Java爬虫获取苏宁易购商品详情
java·开发语言·爬虫
小汤猿人类1 小时前
nacos-服务发现注册
java·开发语言·服务发现
码农爱java1 小时前
设计模式--抽象工厂模式【创建型模式】
java·设计模式·面试·抽象工厂模式·原理·23种设计模式·java 设计模式