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

}

结束。

相关推荐
147API2 分钟前
Claude Tag 进入 Slack 后,团队智能体需要哪些任务与审计字段
java·开发语言·数据库
dyonggan7 分钟前
IDEA从零搭建SpringCloud Alibaba完整工程
java·spring cloud·intellij-idea
代码雕刻家13 分钟前
编程语法细节
java·c语言·开发语言
SimonKing16 分钟前
Agnes AI出桌面版了,可图可视频,免费用
java·后端·程序员
左左右右左右摇晃35 分钟前
手写Tomcat原理整理
java·开发语言·笔记·tomcat
孫治AllenSun39 分钟前
【JVM】四大引用类型分析
java·开发语言·jvm
于慨40 分钟前
安装java
java
夕除42 分钟前
sign 是什么
java·前端
Penina10181 小时前
代码如何导入idea
java·intellij idea
.Hypocritical.1 小时前
Maven笔记——2
java·笔记·maven