我试图编写一个接受两个参数的函数,int[]arr1
和int[]arr2
。然后,它应该按照ARR2
中给出的顺序对ARR1
进行排序。例如,如果ARR1
是[5,7,9,10,7,5]
,ARR2
是[7,9,10,5]
,则函数应返回[7,7,9,10,5,5]
,排序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;
}
您可以更改ARR1
的类型(当然还有返回类型),使类型符合(integer[]
)并简单地编写:
Arrays.sort(arr1, Comparator.comparing(elemToInd::get));
但你的所作所为很让人困惑。您不能将泛型与原语一起使用,只需将数组
类用于帮助器方法。另一方面,对于集合,可以对它们调用sort
方法。
我是Java新手,我正在尝试使用Lambda表达式和比较器。我有一个具有其他getter和toString方法的公共类人员: 现在我想对一个Person[]列表进行排序,首先按String(降序)进行比较,然后按年龄(升序)进行比较,然后按计算机数量(降序)进行比较,最后按Salary(升序)进行比较。我无法实现可比较,因为如果我重写compareTo方法,它应该是升序或降序,我需要两者。我想知道
问题内容: 是否有Java开源比较器可以按多个字段比较bean以进行多列排序?每列可以按升序或降序排序。 对于单列排序,可以与一起使用。 我知道编写此功能非常简单,但是如果已经编写并测试过轮子,那么重新发明轮子有什么好处? 问题答案: 我是几个月前写的。 只需从此类继承并重写doCompare-Method。然后使用设置链中的下一个比较器。比较器在此链中出现的越早,就越“重要”。 编辑: 另请参阅
问题内容: 我想用Lambda排序列表: 但是我得到了这个编译错误: 问题答案: 返回一个; 而显然是。 这样写会更好:
我一直在做拼字游戏作业。我需要从列表中读取单词,然后读取每个字符并赋值,最终为每个单词分配一个总分。已经完成了!唷。现在我需要使用比较器将单词从最高分到最低分进行排序。读了很多,还是很迷茫。我知道我可以使用接口,但也有使用lambda表达式的比较器,这是我想去的方向。我只是不知道该怎么做。我需要比较每个单词的sumValue,然后按降序打印单词。 我创建了 2 个循环来读取单词 (i),然后是字符
问题内容: 我正在尝试根据用户输入对对象列表进行排序。如何使sort方法实现变体比较器? 例: 如何根据需要根据getKey / getModified /其他任意属性进行上述排序? 问题答案: 如果所有“键”都将链接到getter方法,则可以在函数中使用键/ getter的静态映射: 注意:我们将不得不使用原始类型,因为我们不能使用不同的类型(即使所有的获取方法都将返回对象,也会有所不同) 然后
“StringComparator”在“arrays.sort(b,new StringComparator());”出货量和预期的一样。 但当我使用默认排序(步骤如下),然后按“StringComparator”排序时,bug显示: “Arrays.Sort(a);Arrays.Sort(a,new StringComparator());”