Stream——数字类型的字符串排序
文章目录
- 前言
- 什么是数字类型的字符串
- 一个简单的坑demo
- 拯救坑代码
- 对象集合中的数字类型排序(有坑)
- 对象集合中的数字类型排序 解决
- 扩展
- 将数字类型字符串数组转换为Integer集合
- 总结
前言
想到给数据进行排序,一开始头脑中想到的就是sorted(),本篇文章重点说明:
数字类型的字符串数据排序。
其他类型数据排序参考之前的文章:Stream——集合数据按照某一字段排序
什么是数字类型的字符串
数字类型的字符串,准确说是我自己定义的一个名词,就好比下列的数据类型。
"1""2"
一个简单的坑demo
如标题所示,就是一个坑!如下所示:
List<String> intStrArray = Arrays.asList("1","2","3","4","5","9","13","10","12","11");List<String> collect = Optional.ofNullable(intStrArray).orElse(new ArrayList<String>()).stream().filter(x -> x != null).sorted().collect(Collectors.toList());
collect.forEach(x-> System.out.println(x));
如案例中所示,代码看着是没问题的,但是执行后控制台中打印的结果如下所示:

按照第一位排序,第一位排序完成后,才开始进行第二位排序!
拯救坑代码
如何才能说按照数字的形式,从小到大依次排序呢?
功能实现,还是有方法的。
如下所示
List<String> intStrArray = Arrays.asList("1","2","3","4","5","9","13","10","12","11");IntStream intStream = intStrArray.stream().filter(x -> x != null).mapToInt(x -> Integer.parseInt(x));intStream.sorted().forEach(x-> System.out.println(x));

先将String类型的数组,转换成Inter的数据流,再排序输出,完美。
但是这里并没转换其他类型的数组,没找到对应的方法,后续还需要继续研究。
对象集合中的数字类型排序(有坑)
如下所示,并不是简单的String集合,采取对象封装的方式,构成对象集合,对象如下所示:
@Data
class User{private String age;public User(String age) {this.age = age;}
}
写一个简单的数据集合,如下:
List<User> users = Arrays.asList(new User("1"), new User("5"), new User("3"), new User("9"), new User("15"), new User("12"), new User("10"), new User("11"));
依旧采取上述的sorted()排序,这里是对象,所以需要指明具体的属性列,逻辑如下:
import java.util.*;
import java.util.stream.Collectors;public class Test2 {public static void main(String[] args) {List<User> users = Arrays.asList(new User("1"), new User("5"), new User("3"), new User("9"), new User("15"), new User("12"), new User("10"), new User("11"));List<User> collect = Optional.ofNullable(users).orElse(new ArrayList<User>()).stream().filter(x -> x.getAge() != null).sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());collect.forEach(x-> System.out.println(x));}
}
@Data
class User{private String age;public User(String age) {this.age = age;}
}
代码执行后,控制台打印日志信息如下所示:

回到了文章开头所描述的现象!!
对象集合中的数字类型排序 解决
排序依旧是使用sorted(Comparator.comparing(User::getAge)),但是在源码中存在一种新的方式,传递两种参数:

使用这个方法进行测试,怎么玩呢,代码继续往下看:
List<User> users = Arrays.asList(new User("1"), new User("5"), new User("3"), new User("9"), new User("15"), new User("12"), new User("10"), new User("11"));List<User> collect = Optional.ofNullable(users).orElse(new ArrayList<User>()).stream().filter(x -> x.getAge() != null).sorted(Comparator.comparing(User::getAge,Comparator.comparingInt(Integer::parseInt))).collect(Collectors.toList());collect.forEach(x-> System.out.println(x));
执行后,控制台输出如下数据信息:

完美实现功能要求!!
扩展
将数字类型字符串数组转换为Integer集合
List<String> rowsLists = Arrays.asList("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20");List<Integer> collect = rowsLists.stream()
.filter(x -> x != null)
.mapToInt(Integer::parseInt)
.sorted() // 排序
.boxed() // 流中的元素 全部装箱,转换为流
.collect(Collectors.toList());collect.forEach(x-> System.out.println(x));
总结
.sorted(Comparator.comparing(User::getAge,Comparator.comparingInt(Integer::parseInt)))
相关文章:
Stream——数字类型的字符串排序
文章目录前言什么是数字类型的字符串一个简单的坑demo拯救坑代码对象集合中的数字类型排序(有坑)对象集合中的数字类型排序 解决扩展将数字类型字符串数组转换为Integer集合总结前言 想到给数据进行排序,一开始头脑中想到的就是sorted(),本篇文章重点说…...
.NET 8 预览版 1 发布!
.NET 8 是一个长期支持(LTS) 版本。这篇文章涵盖了推动增强功能优先级排序和选择开发的主要主题和目标。.NET 8 预览版和发布候选版本将每月交付一次。像往常一样,最终版本将在 11 月的某个时候在 .NET Conf 上发布。 .NET 版本包括产品、库、运行时和工具…...
WebGIS学习路线
7年经验的webgis码农在此文跟大家分享一些一路走来的所见所闻。希望能帮助刚刚跨入这个门槛的你。 入门之前我相信你已经搞清楚了以下几个问题: 1.什么是webgis? 2.webgis能够解决什么样的问题? 3.为什么你要学习webgis? 如果还没考虑清楚也没关系,可能你看完这篇文章…...
【独家】华为OD机试 - 停车场最大距离(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...
12.typedef的使用与结构体定义
欢迎访问个人网络日志🌹🌹知行空间🌹🌹 文章目录1.基础介绍2.typedef 的常用的几种情况3.使用typedef可能出现的问题参考资料1.基础介绍 typedef是C/C语言中保留的关键字,用来定义一种数据类型的别名。 typedef并没有…...
宝塔+docker+jenkins部署vue项目(保姆级教程)
1.使用宝塔安装docker 在软件商城安装Docker管理器 2.使用docker下载jenkins镜像 使用命令行 docker pull jenkins/jenkins:lts //lts表示支持版本较长3.创建并且挂载jenkins目录并赋值 jenkins_home为我创建的目录 可以修改任意目录 mkdir -p /jenkins_home cho…...
JVM面试总结
1.java内存模型JMM是java的内存模型,JMM-也叫Java Memory Model,这里反应翻译成存储更好,因为工作内存指的不是内存.而是CPU寄存器,主内存才是内存.屏蔽了各种硬件和操作系统的内存访问差异-把硬件的细节封装起来,实现让java程序在各平台下都能达到一致的内存访问效果,它定义了…...
C语言——文件操作
文章目录0. 思维导图1. 为什么使用文件2. 什么是文件2.1 程序文件2.2 数据文件2.3 文件名3. 文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭4. 文件的顺序读写4.1 字符/字符串写入(出)4.2 格式化写入(出)4.3 二进制输入&#…...
使用aim7测试内核性能变化
aim7是一个功能强大的性能测试套件,可以用来测试内核的性能变化情况,尤其是在修改内核源码后,用来测试补丁对内核性能的影响情况。aim7测试结果中有一个重要的统计项:jobs/min,即每分钟完成的任务数量,可以…...
C++——内存管理
一,为什么要有内存管理因为在C/C中各个内置类型或者是自定义类型的大小都不一样,而如何让各个类型在内存中合理分布就非常有必要,由此我们就需要有内存管理。我们来看看下面这个程序中的各个变量都是如何分布的int globalVar 1; static int …...
AOP的另类用法 (权限校验自定义注解)
👳我亲爱的各位大佬们好😘😘😘 ♨️本篇文章记录的为 AOP的另类用法 (权限校验&&自定义注解) 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉…...
[数据结构]:12-快速排序(顺序表指针实现形式)(C语言实现)
目录 前言 已完成内容 快速排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortCommon.cpp 05-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代…...
运算符——“Python”
各位CSDN的uu们你们好呀,好久没有更新Python文章了,今天,小雅兰的内容就是Python中的操作符啦,那么现在,就让我们进入Python的世界吧 注释 注释是什么 注释的语法 注释的规范 输入输出 和用户交互 通过控制台输出 通…...
2022 IoTDB Summit:华为王超《Apache IoTDB 在华为云的实践》
12 月 3 日、4日,2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本,并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例,深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…...
C 语言网络编程 — PF_NETLINK sockets
目录 文章目录目录PF_NETLINK socketsPF_NETLINK sockets Linux 提供了 4 种 User Process 和 Kernel 之间进行通信的 IPC(Inter-Process Communicate,进程间通信)方式: /procioctlsysfsPF_NETLINK sockets(Netlink …...
广州银行冲刺A股上市:不良贷款规模突破100亿元,不良率飙升
又一家城商行平移申报IPO。近日,广州银行股份有限公司(下称“广州银行”)递交招股书,准备在深圳证券交易所主板上市。本次冲刺上市,广州银行计划募资约94.79亿元,国泰君安证券为其保荐机构。 截至目前&…...
【C++】bsearch函数的使用及二分法查找介绍
写程序的时候,肯定避免不了需要从集合中找到符合条件的元素,一般情况下,最简单也最常用的就是循环遍历元素,这种方法虽然写的简单,但是小数据量还行,但是数据过大的话,这样效率就低了。循环的时…...
分布式系统中的补偿机制设计问题
我们知道,应用系统在分布式的情况下,在通信时会有着一个显著的问题,即一个业务流程往往需要组合一组服务,且单单一次通信可能会经过 DNS 服务,网卡、交换机、路由器、负载均衡等设备,而这些服务于设备都不一…...
类成员的方法
初识对象 生活中或是程序中,我们都可以使用设计表格、生产表格、填写表格的形式组织数据进行对比,在程序中: 设计表格,称之为:设计类(class) 打印表格,称之为:创建对象 …...
华为OD机试真题Python实现【端口合并】真题+解题思路+代码(20222023)
端口合并 题目 有M(1<=M<=10)个端口组, 每个端口组是长度为N(1<=N<=100)的整数数组, 如果端口组间存在 2 个及以上不同端口相同, 则认为这 2 个端口组互相关联,可以合并 第一行输入端口组个数 M,再输入 M 行,每行逗号分隔,代表端口组。 输出合并后的端口组…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
