(Java)在array.sort中使用lambda作为比较器
我正在尝试编写一个包含两个参数的函数,(Java)在array.sort中使用lambda作为比较器,java,algorithm,dictionary,java-8,java-stream,Java,Algorithm,Dictionary,Java 8,Java Stream,我正在尝试编写一个包含两个参数的函数,int[]arr1和int[]arr2。然后,它应该按照arr2中给出的顺序对arr1进行排序。例如,如果arr1为[5,7,9,10,7,5]且arr2为[7,9,10,5],则函数应返回[7,7,9,10,5,5],按arr2中的顺序排序arr1 我编写的代码如下,但在Arrays.sort中不断出现错误。我认为我使用lambda的方法不正确。你能具体说明我做错了什么吗 public int[] relativeSortArray(int[] arr1,
int[]arr1
和int[]arr2
。然后,它应该按照arr2
中给出的顺序对arr1
进行排序。例如,如果arr1
为[5,7,9,10,7,5]
且arr2
为[7,9,10,5]
,则函数应返回[7,7,9,10,5,5]
,按arr2
中的顺序排序arr1
我编写的代码如下,但在Arrays.sort中不断出现错误。我认为我使用lambda的方法不正确。你能具体说明我做错了什么吗
public int[] relativeSortArray(int[] arr1, int[] arr2) {
Map<Integer, Integer> elemToInd = new HashMap<Integer, Integer>();
for (int i = 0; i < arr2.length; i++) {
elemToInd.put(arr2[i], i);
}
Arrays.sort(arr1, (int n1, int n2) -> elemToInd.get(n1) - elemToInd.get(n2));
return arr1;
}
public int[]相对数组(int[]arr1,int[]arr2){
Map elemToInd=new HashMap();
for(int i=0;ielemToInd.get(n1)-elemToInd.get(n2));
返回arr1;
}
您可以更改arr1
的类型(当然还有返回类型),以便类型符合(符合Integer[]
)并简单地编写:
Arrays.sort(arr1, Comparator.comparing(elemToInd::get));
但你所做的是相当混乱的。不能将泛型与原语一起使用,只需访问辅助方法的Arrays
clas即可。另一方面,对于集合,可以对其调用sort
方法。包java.util;
package java.util;
public static <T> void sort(T[] a, Comparator<? super T> c)
publicstaticvoidsort(T[]a,comparator只是一个问题:您为什么要“复制”您已经拥有的排序顺序(即,为什么不使用arr2
)?基元类型不能与一起使用generics@ernest_k我认为每次比较时通过arr2查找每个元素的索引会增加时间复杂度,不是吗?arr2[]是否总是保存元素的索引?即,总是有0..N-1之间的数字(N是arr1[]的大小)没有重复?如果是这样的话,根据arr2[]@nimrodm arr2没有重复,但是arr1可以有重复。例如arr1[0,0,0100100],arr2[100,0]=>output[100100,0,0,0]