讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

AniShort
AniShort

AI短剧协同制作平台

如何对字符串中成对的 ID-分数数据按分数升序排序

冬枫姑娘_4282

冬枫姑娘_4282

发布时间:2026-01-28 12:28:17

|

992人浏览过

|

来源于php中文网

原创

如何对字符串中成对的 ID-分数数据按分数升序排序

本文介绍如何将形如“1 456 2 100 3 600 1 400”的空格分隔字符串,按每对中的**分数值(而非id)升序重排**,并保持id与分数的绑定关系,最终输出格式一致的排序后字符串。

在处理这类“交替键值对”字符串时,直接按字符串或数字ID排序会导致逻辑错误(例如ID为1的两条记录被拆散或误排),关键在于语义建模:将每两个连续元素视为一个逻辑单元——即 id 和 score 组成的实体。因此,推荐采用面向对象方式封装数据,再借助Java集合的排序能力实现精准控制。

首先定义一个轻量级数据类:

public class Person {
    private final String id;
    private final int score;

    public Person(String id, int score) {
        this.id = id;
        this.score = score;
    }

    // 重写 toString() 以支持 "id score" 格式输出
    @Override
    public String toString() {
        return id + " " + score;
    }
}

接着解析原始字符串,按步长为2切分,并构建 Person 对象列表:

String input = "1 456 2 100 3 600 1 400";
String[] parts = input.split("\s+"); // 使用正则处理多个空格更健壮

List<Person> people = new ArrayList<>();
for (int i = 0; i < parts.length; i += 2) {
    if (i + 1 >= parts.length) {
        throw new IllegalArgumentException("Invalid input: odd number of tokens");
    }
    String id = parts[i];
    int score = Integer.parseInt(parts[i + 1]);
    people.add(new Person(id, score));
}

然后使用 List.sort() 配合自定义比较器,按 score 升序排列(若需降序,可改为 Integer.compare(p2.score, p1.score)):

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
people.sort(Comparator.comparingInt(p -> p.score));

最后,将排序后的对象流式转换为字符串,用单个空格连接(注意:原题示例输出无逗号,因此应使用 " " 而非 ","):

String result = people.stream()
                      .map(Person::toString)
                      .collect(Collectors.joining(" "));
System.out.println(result); // 输出:2 100 1 400 1 456 3 600

✅ 注意事项:

  • 不要使用 HashMap 存储,因ID可能重复(如本例中ID=1出现两次),会导致数据丢失;
  • 解析时务必校验数组长度为偶数,避免 ArrayIndexOutOfBoundsException;
  • 若输入含前导/尾随空格或多空格,split("\s+") 比 split(" ") 更安全;
  • 如需稳定排序(相同分数时保持原始顺序),可改用 Collections.stableSort(...) 或在比较器中添加次级条件(如索引)。

该方案结构清晰、类型安全、易于扩展(例如后续增加姓名、时间戳等字段),是处理此类结构化字符串排序问题的标准实践。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1158

2023.09.04

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

7715

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

382

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

384

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

263

2026.04.17

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1918

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3164

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6364

2023.10.24

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn