如何在Java中根据另一个配对集合对一个集合进行排序

假如我有两个有序集合(插入顺序很重要,而且我需要忽略重复项LinkedHashSet),其中一个集合中的第 n 个元素与另一个集合中的第 n 个元素配对。但它们不是成对添加的,而是最终结果会是成对的。

例如,在下面的代码中5,会与 配对1.1f,3也会与 配对0.5f

java 复制代码
LinkedHashSet<Integer> slotIDs = new LinkedHashSet<>();
            LinkedHashSet<Float> pitches = new LinkedHashSet<>();

            // 模拟数据添加过程
            slotIDs.add(3);
            slotIDs.add(1);
            slotIDs.add(2);
            pitches.add(0.5f);
            pitches.add(2.2f);
            slotIDs.add(5);
            slotIDs.add(2); 
            pitches.add(1.3f);
            slotIDs.add(4);
            pitches.add(1.1f);
            pitches.add(1.3f);
            pitches.add(0.7f);
            slotIDs.add(5);
            pitches.add(1.1f);

我想根据slotIDs配对结果pitches从低到高排序。在上面的例子中,我想要这样的结果:3, 4, 5, 2, 1

java 复制代码
					// 1. 将Set转换为List,以便通过索引访问
            List<Integer> slotIDList = new ArrayList<>(slotIDs);
            List<Float> pitchList = new ArrayList<>(pitches);

            // 2. 确定有效配对的数量(以较短的列表为准)
            int pairCount = Math.min(slotIDList.size(), pitchList.size());

            // 3. 创建一个包含索引的列表 [0, 1, 2, ...],并根据对应的pitch值进行排序
            List<Integer> sortedIndices = IntStream.range(0, pairCount)
                    .boxed()
                    .sorted(Comparator.comparing(pitchList::get))
                    .collect(Collectors.toList());

            // 4. 根据排序后的索引,构建最终的slotID列表
            List<Integer> result = sortedIndices.stream()
                    .map(slotIDList::get)
                    .collect(Collectors.toList());

            // --- 核心逻辑结束 ---

            System.out.println(result); // 输出:

结果

相关推荐
小bo波6 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8861 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师2 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_02 天前
mac(m5)平台编译openjdk
java
唐青枫3 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马3 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261353 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261353 天前
Java 打印 Word 文档:从基础打印到高级设置
java