对数组值进行排序,以便它们对应于正在排序的其他数组(当它实际上保持不变时)



我是Java的新手,这个问题可能很简单,但我真的需要帮助,因为我很难找到任何可能的解决方案来解决我遇到的这个问题。

首先,一个简短的例子来描述我的问题。假设我有两个数组列表:

// prices
[14, 2, 1, 10]
// ID numbers which correspond to these prices
[0, 1, 2, 3]

我的目标是对这些 ID 进行排序,以便它们对应于按升序排序的随机整数。换句话说,结果应该是:

// IDs sorted so they correspond to prices being in ascending order
[2, 1, 3, 0]

随机整数数组应保持不变。

可能吗?你能帮我提供一些想法吗?

假设"ID 号"实际上是第一个数组的索引,如示例中所示,那么您可以像这样排序:

int[] prices = { 14, 2, 1, 10 };
int[] idNumbers = { 0, 1, 2, 3 };
int[] sorted = Arrays.stream(idNumbers).boxed()
.sorted(Comparator.comparingInt(i -> prices[i]))
.mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(sorted));

输出

[2, 1, 3, 0]

遗憾的是,Java 的运行时库没有提供使用Comparator(或原语等效项(对原语数组进行排序的sort方法,因此在流式处理时对值进行装箱和拆箱是最简单的解决方案。

最新更新