Java 排序数组并将位置更改应用于另一个数组
我希望标题不要太误导人。我有两个数组,例如:Java 排序数组并将位置更改应用于另一个数组,java,arrays,list,sorting,Java,Arrays,List,Sorting,我希望标题不要太误导人。我有两个数组,例如: [9, 2, 5, 6, 3] [1.0, 7.0, 4.0, 9.0, 8.0] 首先,我想对第一个数组进行升序排序。然后,我想将位置更改应用于第二个数组,不管第二个数组的排序是否正确 因此,应用于给定示例,结果将是: [2, 3, 5, 6, 9] [7.0, 8.0, 4.0, 9.0, 1.0] 或者,它也可以是列表而不是数组。有人能帮忙吗?你必须跟踪索引。最简单的方法是对索引编号而不是值进行排序,但使用第一个数组的值进行比较,然后将索引
[9, 2, 5, 6, 3]
[1.0, 7.0, 4.0, 9.0, 8.0]
首先,我想对第一个数组进行升序排序。然后,我想将位置更改应用于第二个数组,不管第二个数组的排序是否正确
因此,应用于给定示例,结果将是:
[2, 3, 5, 6, 9]
[7.0, 8.0, 4.0, 9.0, 1.0]
或者,它也可以是列表而不是数组。有人能帮忙吗?你必须跟踪索引。最简单的方法是对索引编号而不是值进行排序,但使用第一个数组的值进行比较,然后将索引的顺序应用于第二个数组 使用Java 8,您可以按如下方式执行:
int[] iArray={9, 2, 5, 6, 3};
double[] dArray={1.0, 7.0, 4.0, 9.0, 8.0};
double[] result=
// original indices: ascending numbers from 0 to array length
IntStream.range(0, iArray.length)
// sort using the values of the first array
.boxed().sorted(Comparator.comparingInt(ix->iArray[ix]))
// apply to the values of the second array
.mapToDouble(ix->dArray[ix])
// create a result array
.toArray();
System.out.println(Arrays.toString(result));
对于Java 8之前的解决方案,您可以查看。我将创建一个Bean来保存这两个值
public static class MyBean {
int i;
double d;
// constructor
}
和一个比较器
static final Comparator<MyBean> COMPARATOR = new Comparator<MyBean>() {
public int compare(MyBean b1, MyBean b2) {
return new Integer(b1.i).compareTo(b2.i);
}
}
是的,我们可以。到目前为止,您尝试了什么?请参阅以获取一种方法。@John您可以简单地将这两种方法与第一种方法之后的第二种阵列交换一起排序。
MyBean[] beans = {
new MyBean(10, 2.1),
new MyBean(20, 2.2),
new MyBean(5, 1.3)
};
Arrays.sort(beans, COMPARATOR);
for (MyBean bean : MyBeans) {
// do whatever
}