首页 > 其他分享 >JDK 8 之后可以使用更加简单的方法 Stream 流来实现排序功能

JDK 8 之后可以使用更加简单的方法 Stream 流来实现排序功能

时间:2024-07-12 15:09:41浏览次数:13  
标签:Stream 排序 JDK Comparator list Person new null 排序功能

 // 创建并初始化 List
        List<Person> list = new ArrayList<Person>() {{
            add(new Person(1, 30, "张三"));
            add(new Person(2, 20, "李四"));
            add(new Person(3, 40, "王五"));
        }};
        // 使用 Stream 排序
        list = list.stream().sorted(Comparator.comparing(Person::getAge).reversed())
                .collect(Collectors.toList());

其中 reversed() 表示倒序的意思,如果不使用此方法则是正序。

 

 

扩展:排序字段为 null

使用 Stream 进行排序时,如果排序的字段出现 null 值就会导致异常发生,具体示例如下:

// 按照[年龄]排序,但年龄中有一个 null 值
        list = list.stream().sorted(Comparator.comparing(Person::getAge,
                Comparator.nullsFirst(Integer::compareTo)).reversed())
                .collect(Collectors.toList());

 Comparator.nullsFirst 表示将排序字段中的 null 值放到集合最前面,如果想要将 null 值放到集合最后面可以使用 Comparator.nullsLast。

标签:Stream,排序,JDK,Comparator,list,Person,new,null,排序功能
From: https://www.cnblogs.com/Fooo/p/18298434

相关文章

  • 流媒体资源 (Streaming Assets)
    Unity中的大多数资源在构建时都会合并到项目中。但是,将文件放入目标计算机上的普通文件系统以使其可通过路径名访问有时会很有用。这方面的一个例子是在iOS设备上部署电影文件;原始电影文件必须位于文件系统中的某个位置以便由 PlayMovie 函数进行播放。放置在Unity项目中......
  • 前端如何接收EventStream中的数据?
    本文目录1、fetch2、EventSourcefetchfetch是浏览器内置的方法无需下载fetch("http://127.0.0.1:6594/ws/getAccessToken",{method:"get",}).then((response)=>{constdecoder=newTextDecoder("utf-8");......
  • C# Winform之propertyGrid控件分组后排序功能
    在WinForms的PropertyGrid控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid控件会根据[Category]和[DisplayName]属性装饰器对属性进行分组和排序。如果你想要自定义排序规则,你可以通过以下几种方法:使用......
  • 66、Flink 的 DataStream Connectors 支持的 Formats 详解
    支持的Formats1.概述Format定义如何对Record进行编码以进行存储,目前支持以下格式:AvroAzureTableHadoopParquetTextfiles2.AvroformatFlink内置支持ApacheAvro格式,Flink的序列化框架可以处理基于Avroschemas生成的类,为了能够使用Avroformat,需要添......
  • 65、Flink 的 DataStream Connectors 概述
    1)概览1.预定义的Source和Sink预定义的datasources支持从文件、目录、socket,以及collections和iterators中读取数据。预定义的datasinks支持把数据写入文件、标准输出(stdout)、标准错误输出(stderr)和socket。2.附带的连接器连接器可以和多种多样的第三方系......
  • JDK8新特性
    lambda表达式函数式接口方法引用stream流日期时间类  1.lambda表达式lambda表达式允许把函数作为一个方法的参数(函数作为方法参数进行传递),将代码像数据一样传递。特殊的匿名内部类,语法更加简洁  注意:函数式接口接口中只有一个抽象方法 传统方式 publiccla......
  • Linux安装JDK详细教程
    Linux安装JDK详细教程(图文教程)这里介绍两种方式:yum安装方式和手动安装1、yum安装1.1查看JDK版本,找到你想要安装的JDK版本,这里以JDK1.8为例输入命令:yum-ylistjava*1.2安装JDK1.8输入命令:yuminstall-yjava-1.8.0-openjdk.x86_64没权限执行这行:sudoyuminstall......
  • Windows下升级JDK
    1.官网下载安装包,官网地址:https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows 2.java-version检查现有jdk版本3.修改环境变量 4.  java-version检查jdk版本,未生效 输出环境变量,发现确实配置已经成功 5.重启电脑,搞定 ......
  • 对Stream函数式编程的理解
    什么是StreamStream被翻译为流,它的工作过程像将一瓶水导入有很多过滤阀的管道一样,水每经过一个过滤阀,便被操作一次,比如过滤,转换等,最后管道的另外一头有一个容器负责接收剩下的水。示意图如下:首先通过source产生流,然后依次通过一些中间操作,比如过滤,转换,限制等,最后结束对流的操......
  • JDK8的型特性
             Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java8,它支持函数式编程,新的JavaScript引擎,新的日期API,新的StreamAPI等。        jdk8的官网What'sNewinJDK8(oracle.com)   ......