Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对数组值进行排序,使其与正在排序的其他数组相对应(当它实际上没有变化时)_Java_Arrays_Sorting - Fatal编程技术网

Java 对数组值进行排序,使其与正在排序的其他数组相对应(当它实际上没有变化时)

Java 对数组值进行排序,使其与正在排序的其他数组相对应(当它实际上没有变化时),java,arrays,sorting,Java,Arrays,Sorting,我对Java完全陌生,这个问题可能很简单,但我真的需要帮助,因为我很难找到解决这个问题的任何可能的方法 首先,用一个简短的例子来描述我的问题。假设我有两个数组列表: // prices [14, 2, 1, 10] // ID numbers which correspond to these prices [0, 1, 2, 3] 我的目标是对这些ID进行排序,以便它们与按升序排序的随机整数相对应。换句话说,结果应该是: // IDs sorted so they correspond t

我对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的运行时库没有提供使用
比较器
(或等效的原语)对原语数组进行排序的
排序方法,因此在流式处理时装箱和取消装箱是最简单的解决方案。

不要使用两个并行数组。相反,使用单个对象数组(或列表),其中每个对象都有一个ID和一个价格。第二个数组是“ID编号”,还是索引值?例如,第二个数组是否可以是
[3,4,7,9]
?或者它们总是从
0
开始连续,即索引到第一个数组?与Andreas评论类似,可以使用
TreeMap
,以
ID
为键,以
price
为值。@Andreas在我看来,它们总是以零为基础的索引。k4rina在我看来,JB的答案是正确的。您需要创建一个类来存储这些对,然后为该类创建一个比较方法或比较器,以比较价格值。然后遍历数组,为每对条目构建一个对象,并将它们插入一些自排序结构(如树集)。