我是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
方法,因此在流式处理时对值进行装箱和拆箱是最简单的解决方案。