我的问题可能不清楚,所以让我通过示例将其清除:
Arrays.sort(arr, new Comparator<String>(){
public int compare(String a, String b){
return (b + a).compareTo(a + b);
}
});
我想使用Comparator.comparing。我尝试了以下方法:
Arrays.sort(arr, Comparator.comparing((a, b) -> (b + a).compareTo((String)a + b)));
我收到一个错误-lamdba表达式中的返回类型错误。如何解决呢?
正如已经回答的,您的匿名类实现可以简化为lambda表达式:
Arrays.sort(arr, (a, b) -> (b + a).compareTo(a + b));
如果您insist使用Comparator.comparing()
,请记住它具有不适合您的排序问题的特定参数。
Comparator.comparing(keyExtractor)
根据自然比较方式(Comparator.comparing(keyExtractor)
)为某些键返回指定的Comparator
。您的方法不是说要比较[[what,而是说是[[how。]]Comparator.naturalOrder
看起来更好一点,因为您可以指定Comparator.naturalOrder
比较指定的键。您可以使用比较逻辑,并得出以下结论:Comparator.comparing(keyExtractor, keyComparator)
Comparator.comparing(keyExtractor, keyComparator)
的解决方案,该解决方案使用keyComparator
和Arrays.sort(arr, Comparator.comparing(
Function.identity(), // keyExtractor, WHAT is compared
(a, b) -> (b + a).compareTo(a + b))); // keyComparator, HOW is it compared
返回输入(与Comparator.comparing
lambda表达式相同),因为您仍想比较字符串,但是用自定义指定的方式不同keyExtractor
,因此,根据需要对数组进行排序的唯一正确方法是省略了Function.identity()
的简化版本:str -> str
...终于是我们开始的地方。