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

这篇具有很好参考价值的文章主要介绍了Stream——数字类型的字符串排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

想到给数据进行排序,一开始头脑中想到的就是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));

如案例中所示,代码看着是没问题的,但是执行后控制台中打印的结果如下所示:
java stream 字符串排序,java基础,java,stream

按照第一位排序,第一位排序完成后,才开始进行第二位排序!

拯救坑代码

如何才能说按照数字的形式,从小到大依次排序呢?

功能实现,还是有方法的。

如下所示

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

java stream 字符串排序,java基础,java,stream

先将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;
    }
}

代码执行后,控制台打印日志信息如下所示:
java stream 字符串排序,java基础,java,stream

回到了文章开头所描述的现象!!

对象集合中的数字类型排序 解决

排序依旧是使用sorted(Comparator.comparing(User::getAge)),但是在源码中存在一种新的方式,传递两种参数:
java stream 字符串排序,java基础,java,stream
使用这个方法进行测试,怎么玩呢,代码继续往下看:

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

执行后,控制台输出如下数据信息:
java stream 字符串排序,java基础,java,stream

完美实现功能要求!!

扩展

将数字类型字符串数组转换为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)))文章来源地址https://www.toymoban.com/news/detail-548274.html

到了这里,关于Stream——数字类型的字符串排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES:字符串排序,字符串按照数字排序

    对一个字符串类型的字段进行排序通常不准确,因为已经被分词成多个词条了 字段虽然是字符串,但是其实值是整数, 排序按照字符串转成整数排序 解决方式:对字段索引两次,一次索引分词(用于搜索),一次索引不分词(用于排序) 期望按照字符串排序, 不分词 期望按照

    2024年02月11日
    浏览(42)
  • python常见的数据类型与数据结构(一)数字类型 字符串类型 布尔类型 列表 集合 字典 的定义与常规操作方法

    数字类型有int(整数),float(浮点数)和complex(复数型),其中int与float被大家所常用并且可以使用int()和float()函数相互转换。如果字符串只包含数字和小数点也可以被这两种函数强制转换。复数型,则少被人们使用,大都是用在数学公式和物理公式的计算上。 字符串类型较为简单

    2024年02月21日
    浏览(48)
  • 【Python】对key或values是datetime类型或时间字符串的字典dict排序

    当字典的key是时间字符串类型,如下 time_dict = {‘2021-05-18’: 119, ‘2021-06-05’: 119, ‘2020-12-10’: 116, ‘2021-04-19’: 110, ‘2020-12-04’: 108, ‘2021-04-13’: 106, ‘2020-12-08’: 106, ‘2020-09-12’: 103, ‘2021-05-14’: 101, ‘2021-05-08’: 100, ‘2021-01-09’: 99, ‘2020-12-09’: 99, ‘2021-06-25’: 99, ‘

    2023年04月08日
    浏览(37)
  • Java实现字符串排序的几种方式

    创建实体类(此处引入了lombok) 一、使用List集合中自带的sort方法(字符串的位数保持一致,不一致的情况可以在左边补0,也可以使用String.format()方法补全) 1、在对象排序中使用 2、在字符串排序中使用 二、使用Stream流(字符串的位数保持一致,不一致的情况可以在左边补

    2024年02月11日
    浏览(51)
  • java怎么把字符串转换成日期类型

    1、java怎么把字符串转换成日期类型 2、Java如何将指定字符串转化为指定日期格式 3、求JAVA高手解答!有关于字符串类型转换成日期型! 4、Java中怎么把字符串转换成日期格式啊 5、java中怎样将字符串转换成日期形式存入数据库 定义一个字符串类型的时间 java字符串转日期 ;创

    2024年02月06日
    浏览(50)
  • Java中字符串和日期类型的相互转换

    当在Java中进行字符串和日期类型之间的相互转换时,可以使用 SimpleDateFormat 类来实现。下面是一个详细的代码示例,展示了如何将字符串转换为日期类型,以及如何将日期类型转换为字符串。 首先,我们来看字符串转换为日期类型的示例代码: 在上述代码中,我们首先定义

    2024年02月14日
    浏览(63)
  • Java中如何获取一个字符串是什么类型

    在Java中,您可以使用一些方法来确定一个字符串的类型。下面是一些常用的方法: 使用正则表达式:您可以使用正则表达式来匹配字符串是否符合特定的模式或格式,以确定其类型。例如,使用matches()方法可以检查字符串是否匹配某个特定的正则表达式模式。 使用内置方法

    2024年02月09日
    浏览(41)
  • 【java】Java基础-数字与字符串的互转汇总

    1、通过ToString() 方法, Double 就是一个包装类,String s1 = Double. toString (num); Integer同理 2、通过valueof() 方法, 本质上还是调用 toString() 方法,String s2 = String. valueOf (num); 3、技巧性,第三种没有借助包装类 String s3 =\\\"\\\"+num; string 和int之间的转换 string转换成int  :Integer.valueOf(\\\"12\\\") 或者

    2023年04月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包