首页 > 编程语言 >java List集合排序方式

java List集合排序方式

时间:2024-07-05 16:52:38浏览次数:13  
标签:java List list DateTime Integer NodeList 排序

java List集合排序方式

1.使用直接上代码

package com.demo;

import cn.hutool.core.date.DateTime;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.*;
import java.util.stream.Collectors;

public class DemoCollectionsSortMain {

    public static void main(String[] args) {
        //初始化collectionsList集合
        List<NodeList> collectionsList = initializeListNodeTest();
        //1.用 Collections.sort 重写compare函数进行排序
        sortNodeList(collectionsList);
        System.out.println("===============================================================");

        //初始化streamList集合
        List<NodeList> streamList = initializeListNodeTest();
        //2.使用stream流排序
        streamSortNodeList(streamList);
        System.out.println("===============================================================");

        //初始化streamMoreList集合
        List<NodeList> streamMoreList = initializeListNodeTest();
        //2.使用stream流多个属性排序
        streamSortMoreNodeList(streamMoreList);

    }

    /**
     * 1.使用 Collections.sort 重写compare函数
     * @param list
     */
    public static void sortNodeList(List<NodeList> list){
        //1.第一种排序方式
        Collections.sort(list, new Comparator<NodeList>() {
            @Override
            public int compare(NodeList o1, NodeList o2) {
                Integer o1Disp = o1.getDisp();
                Integer o2Disp = o2.getDisp();
                //如果排序字段相同,则使用 dateTime 时间排序
                if(o1Disp == o2Disp) {
                    DateTime t1 = o1.getDateTime();
                    DateTime t2 = o2.getDateTime();
                    return t2.compareTo(t1);
                } else {
                    return Integer.compare(o1Disp, o2Disp);
                }
            }
        });

        //遍历排序后的List
        list.forEach(f->{
            System.out.println(f.getDisp()+"    "+f.getDateTime());
        });
    }

    /**
     * 2.使用 stream 流排序
     * 使用 disp 排序
     * 使用流的方式排序,需要考虑到排序字段有可能为null,添加Comparator.nullsLast(Integer::compareTo)) 防止null抛出异常
     * @param list
     */
    public static void streamSortNodeList(List<NodeList> list){
        //1.使用流的方式排序,需要考虑到排序字段有可能为null,添加Comparator.nullsLast(Integer::compareTo)) 防止null抛出异常
        List<NodeList> newList = list.stream()
                .sorted(Comparator.comparing(NodeList::getDisp,Comparator.nullsLast(Integer::compareTo)))
                .collect(Collectors.toList());
        //遍历排序后的List
        newList.forEach(f->{
            System.out.println(f.getDisp()+"   |  "+f.getDateTime());
        });
    }

    /**
     * 3.使用 stream 流 多个属性字段 排序
     * 使用多个属性字段进行排序
     * 使用流的方式排序,需要考虑到排序字段有可能为null,添加Comparator.nullsLast(Integer::compareTo)) 防止null抛出异常
     * @param list
     */
    public static void streamSortMoreNodeList(List<NodeList> list){
        //1.多个属性字段使用流的方式排序,需要考虑到排序字段有可能为null,添加Comparator.nullsLast(Integer::compareTo)) 防止null抛出异常
        List<NodeList> newList = list.stream()
                .sorted(Comparator.comparing(NodeList::getDisp,Comparator.nullsLast(Integer::compareTo))
                        .thenComparing(NodeList::getDateTime,Comparator.nullsLast(Date::compareTo)))
                .collect(Collectors.toList());
        //遍历排序后的List
        newList.forEach(f->{
            System.out.println(f.getDisp()+"   |  "+f.getDateTime());
        });
    }

    /**
     * 初始化 NodeTest 列表
     * @return
     */
    public static List<NodeList> initializeListNodeTest(){
        DateTime t1 = new DateTime("2024-07-04 13:29:58");
        DateTime t2 = new DateTime("2024-07-04 13:29:23");
        DateTime t3 = new DateTime("2024-07-04 13:29:19");
        DateTime t4 = new DateTime("2024-07-04 13:29:45");
        List<NodeList> list = new ArrayList<>();
        NodeList test1 = new NodeList(0,t1);
        NodeList test2 = new NodeList(0,t2);
        NodeList test3 = new NodeList(2,t3);
        NodeList test4 = new NodeList(0,t4);
        list.add(test1);
        list.add(test2);
        list.add(test3);
        list.add(test4);
        return list;
    }

}

@Data
@AllArgsConstructor
class NodeList{
    private Integer disp; //排序字段
    private DateTime dateTime; //排序字段
}

 

标签:java,List,list,DateTime,Integer,NodeList,排序
From: https://www.cnblogs.com/ningbeibei/p/18286147

相关文章

  • ArrayList底层结构和源码分析
    //无参构造器创建ArrayList对象//ArrayListlist=newArrayList();//断点1ArrayListlist=newArrayList(8);//断点2//添加1-10数据for(inti=0;i<=10;i++){list.add(i);}//添......
  • ArrayList和LinkedList的比较
    基本比较 底层结构增删效率改查效率ArrayList可变数组较低;数组扩容较高LinkedList双向链表较高,通过链表追加较低选择使用若改查操作多选择ArrayList增删操作多选择LinkedList通常程序中大部分操作为查询,因此通常使用ArrayList根据需求,效率优先的原则......
  • Java EE改名Jakarta EE,jakarta对程序的影响
    一、前言很多Java程序员在使用新版本的Spring6或者springboot3版本的时候,发现了一些叫jakarta的包。我在阅读开源工作流引擎camunda源代码的时候,也发展了大量jakarta的工程包。比如:camunda的webapps编译工程就提供了2种方式javax和jakarta*`assembly`-Javasourcesandtes......
  • 1055 - Expression #9 of SELECT list is not in GROUP BY clause and contains nonag
    MySQL8的默认sql_mode包含了only_full_group_by,如果想要sql不按照这模式做检查,可以设置当前session的sql_mode值不包含oly_full_group_by;全局修改则使用以下sql--全局配置session级配置则去掉GlobalSETGLOBALsql_mode='ANSI_QUOTES,STRICT_ALL_TABLES,STRICT_TRANS_TAB......
  • 基于javaweb二手闲置物品在线交易平台系统作品成品
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript学校网站(成都大学)
    HTML+CSS+JS【学校网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 【JAVA】权限修饰符
    一,认识权限修饰符(public,protected,“空”,private)public(公共的)1.public对所有类可见。使用对象:类、接口、变量、方法·被声明为public的类、方法、构造方法和接口能够被任何其他类访问。·如果这些类分布在不同的包中,那么我们可以通过导包(import关键字)进行导包就能操作......
  • java 用bouncycastle 生成pem格式的rsa
    maven pem.xml<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version><!--请根据需要检查最新版本--></dependency> java用bouncyca......
  • 面试必会之JAVA基础篇
    1.Final有什么用?被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的finalArrayList<Integer>finalList=newArrayList<>();//初始化后,finalL......
  • 断点续传:使用java对大文件进行分块与合并
    通常我们下载上传的视频文件比较大。虽然https协议没有规定上传文件大小的限制,但是网络的质量,电脑硬件的参差不齐可能会导致大文件快要上传完成的时候突然断网了要重新上传,非常影响用户体验。以此我们引入了断点续传的功能。什么是断点续传呢?就是我们在上传下载文件的时候,将一个......