(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]