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

}

结束。

相关推荐
赵大海10 小时前
黑马《Java架构师实战训练营 (含完整资料)》
java
不带刺仙人球10 小时前
list.stream().collect例子
java·list·dubbo
Carve_the_Code11 小时前
分布式订单系统:订单号编码设计实战
java·后端
Home11 小时前
23种设计模式之代理模式(结构型模式二)
java·后端
程序员西西11 小时前
详细介绍Spring Boot中用到的JSON序列化技术?
java·后端
雨中飘荡的记忆11 小时前
MySQL 优化实战
java·mysql
豆豆的java之旅11 小时前
深入浅出Activity工作流:从理论到实践,让业务流转自动化
java·运维·自动化·activity·工作流
一点 内容11 小时前
深度解析OurBMC后端模式:全栈技术架构与运维实践
java·开发语言
q***235711 小时前
MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互
java·数据库·mysql
合方圆~小文11 小时前
球型摄像机作为现代监控系统的核心设备
java·数据库·c++·人工智能