我有两个大小相同的数组。
ArrayList<ProfileClass> array1= new ArrayList<>()
ArrayList<Double> array2= new ArrayList<>()
array1 = {b,d,a,c}
array2 = {2.0,4.0,1.0,3.0}
现在,我需要按降序对array2进行排序。
Collections.sort(array2, Collections.reverseOrder());
Expected result: {4.0,3.0,2.0,1.0}
因此,在对每个值进行排序之前,这些值的索引与在排序之后的索引不同。但是,针对array2中的每个值更改索引,我希望array1针对array2中的每个值更改索引。
Final Expected result of array1: {d,c,b,a}
您可以通过按的值对索引(0、1、2、3)排序array2
并将结果映射到的值来获得结果array1
。
System.out.println("array1=" + array1);
System.out.println("array2=" + array2);
ArrayList<ProfileClass> sortedArray1 = IntStream.range(0, array2.size())
.boxed()
.sorted(Collections.reverseOrder(Comparator.comparingDouble(i -> array2.get(i))))
.map(i -> array1.get(i))
.collect(Collectors.toCollection(ArrayList::new));
System.out.println("sorted array1=" + sortedArray1);
输出:
array1=[b, d, a, c]
array2=[2.0, 4.0, 1.0, 3.0]
sorted array1=[d, c, b, a]
或者您也可以这样做。
ArrayList<ProfileClass> sortedArray1 = IntStream.range(0, array2.size())
.mapToObj(i -> new Object() {
double sortKey = array2.get(i);
ProfileClass value = array1.get(i);
})
.sorted(Collections.reverseOrder(Comparator.comparingDouble(obj -> obj.sortKey)))
.map(obj -> obj.value)
.collect(Collectors.toCollection(ArrayList::new));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句