Stream——数字类型的字符串排序

news2024/11/26 20:25:48

文章目录

  • 前言
  • 什么是数字类型的字符串
  • 一个简单的坑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)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSL安全证书有什么优缺点?

在将SSL实施到您的站点之前&#xff0c;了解SSL的优点和缺点非常重要。下面就给大家分析下安装SSL证书有什么优缺点&#xff1a;优点&#xff1a;1. 加密信息确保您在线发送的数据只被指定的接收者读取&#xff0c;而不被其他人读取。SSL对原始数据进行了一些更改&#xff0c;因…

秒懂SpringBoot之Filter与HandlerInterceptor异同

[版权申明] 非商业目的注明出处可自由转载 出自&#xff1a;shusheng007 文章目录概述前置知识Filter原理及使用场景使用执行顺序设置Filter作用范围HandlerInterceptor原理及使用场景使用实现org.springframework.web.servlet.HandlerInterceptor 接口配置二者异同共同点不同点…

RocketMQ 高级特性

1&#xff0c;事务消息代码实现 之前我们已经在讨论订单业务消息丢失问题中引出了事务消息&#xff0c;本内容我们就实际用代码来实现一下事务消息吧。 首先我们用原生代码来实现一下事务消息&#xff0c;下面是事务消息生产者TransactionProducer类的代码&#xff0c;具体代码…

基于LinkedList高性能android列表适配器

1、前言 我们大部分的时候都是使用ArrayList作为Android适配器Adapter&#xff08;无论是ListView或者RecyclerView&#xff09;下的数据容器。为什么使用ArrayList呢&#xff1f;因为他的内部是由数组实现的&#xff0c;所以访问数组元素速度最快&#xff0c;但是如果数据变化…

JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理

目录 0 前言 1 准备工作介绍 2 一维数组 2.1 return形式 2.2 参数形式 3 二维数组 3.1 return形式 3.2 参数形式 4 三维数组 4.1 return形式 4.2 参数形式 5 测试代码 6 结果说明 0 前言 就如之前我写过的一篇文章【JNI内形参从C代码中获取返回值并返回到Java层使…

Elsevier上传LaTeX 修改稿踩坑

背景 千辛万苦修改完论文&#xff0c;结果发现要求上传可编辑文件&#xff0c;tex上传真的太难了&#xff0c;一堆坑&#xff0c;尤其是编译错误&#xff0c;要等系统创建pdf后才能找到。中间还打了北京的客服电话&#xff0c;结果他们那边并不懂相关的东西。说latex是第三方公…

C语言-基础了解-22-C文件读写

C文件读写 一、打开文件 可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件&#xff0c;这个调用会初始化类型 FILE 的一个对象&#xff0c;类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型&#xff1a; FILE *fopen( const char *fil…

JS中undefined和null的区别

● JavaScript 真是一个特殊的语言, 其他语言都只有一个表示 “无” 的值, 比如 Java 语言用的是 null, C 语言用的是 NULL, Python 语言用的是 None, Ruby 语言用的是 nil. 只有 JS 里面表示 “空” 的有两个, 一个是 undefined, 一个是 null ● 很多小朋友在刚开始学习的时候…

【项目设计】高并发内存池(六)[细节优化+测试]

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…

[ 网络 ] 应用层协议 —— HTTP协议

目录 1.HTTP协议 1.1URL urlencode和urldecode 2. HTTP协议格式 HTTP请求 HTTP响应 3.告知服务器意图的HTTP方法 GET&#xff1a;获取资源 POST&#xff1a;传输实体主体 GET和POST的区别 使用Cookie的状态管理 4.返回结果的HTTP状态码 状态码告知从服务器端返回的…

十连胜!实在智能×浙江省十家农商行,数字科技赋能普惠金融

近日&#xff0c;中共中央、国务院印发了《数字中国建设整体布局规划》&#xff08;以下简称《规划》&#xff09;。《规划》指出&#xff0c;建设数字中国是数字时代推进中国式现代化的重要引擎&#xff0c;是构筑国家竞争新优势的有力支撑。全面提升数字中国建设的整体性、系…

C语言-基础了解-23-C预处理器

C预处理器 一、C预处理器 C 预处理器不是编译器的组成部分&#xff0c;但是它是编译过程中一个单独的步骤。简言之&#xff0c;C 预处理器只不过是一个文本替换工具而已&#xff0c;它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器&#xff08;C Prepr…

spring-security2

参考b站up主&#xff1a;传送门 前沿 &#xff1a; 回顾上章&#xff1a;最顶层就是一个过滤器 SpringSecurity流程&#xff1a;FilterChainProxy->根据请求决定一个 SecurityFilterChain (挨个调用其matches方法 匹配请求能否处理)-> 执行SecurityFilterChain中的一系列…

Java简单认识泛型——图文详解

写在开头:想必大家和博主一样&#xff0c;在以往学习JavaSE的语法中&#xff0c;遇到了一个陌生的词——泛型&#xff0c;博主当时很好奇&#xff0c;什么是泛型呢&#xff1f;即使是学完了JavaSE&#xff0c;这个问题都没有解决&#xff0c;只能在百度查阅了解关于泛型的一些皮…

Maven依赖的基本概念

目录 1.依赖的基本配置 2.依赖范围 3.传递性依赖 1.依赖的基本配置 根元素project下的dependencies可以包含多个 dependence元素&#xff0c;以声明多个依赖。每个依赖都应该包含以下元素&#xff1a; 1. groupId, artifactId, version : 依赖的基本坐标&#xff0c; 对于任…

【C和C++】输出100内能够被13整除的数,取模判断方法

目录 前言基础概念重温整除例子小知识点收尾前言 在软件行业已经有快十年,技术虽然一般般,但是足够应付和解决编程入门的相关问题! 都说十年磨一剑,积累到一定经验,是时候发挥自己的价值,给予入门的同行些许的帮助! 为什么要写收费专栏,其实原因很简单,时间就是金钱(…

聚观早报 |拼多多跨境电商业务正式登陆澳洲;中国加快6G网络研发

今日要闻&#xff1a;拼多多跨境电商业务正式登陆澳洲&#xff1b;全球自动驾驶公司排名特斯拉垫底&#xff1b;中国将加快 6G 网络研发&#xff1b;B站再次“崩”上热搜&#xff01;已闪电修复&#xff1b;微软将必应AI聊天每次对话上限增加至8条拼多多跨境电商业务正式登陆澳…

大神教你在 Linux 中查看你的时区

在这篇短文中&#xff0c;我们将向你简单介绍几种 Linux 下查看系统时区的简单方法。在 Linux 机器中&#xff0c;尤其是生产服务器上的时间管理技能&#xff0c;是在系统管理中一个极其重要的方面。Linux 包含多种可用的时间管理工具&#xff0c;比如 date 或 timedatectlcomm…

自动化测试——执行javaScript脚本

文章目录一、点击元素(对应的click())二、input标签对应的值&#xff08;对应的send_keys()&#xff09;修改时间控件的属性值&#xff1a;三、元素的文本属性四、js脚本滚动操作一、点击元素(对应的click()) 使用场景&#xff1a;当使用显性等待不能解决问题时 代码中实现点击…

[神经网络]DETR目标检测网络

一、概述 相较于传统目标检测&#xff0c;DETR是一种纯端到端的网络。它不再需要NMS(非极大值抑制&#xff0c;用于去除多余的预测框)和生成anchor。 DETR提出了一个新的目标函数&#xff08;二分图匹配&#xff09;&#xff0c;这个函数可以强制网络输出一个独一无二的预测值&…