Java中Lambda表达式排序报错求助:基于拼接结果排序失败
问题原因及解决办法
核心问题
你用int[]这种基本类型数组调用Arrays.sort时,该方法没有接受Comparator(也就是你写的Lambda表达式)的重载版本。Arrays.sort只有针对对象数组(比如Integer[])的重载才支持自定义比较逻辑,基本类型数组的sort方法只能用默认的数值排序规则。
修正方案
把数组转换成Integer[]包装类数组,用自定义Comparator完成排序后,再转回int[]即可。
修正后的代码
import java.util.Arrays; class Solution { public int[] sort(int[] nums) { // 将int[]转为Integer[]包装类数组 Integer[] arr = Arrays.stream(nums).boxed().toArray(Integer[]::new); // 按拼接字符串的规则排序 Arrays.sort(arr, (a, b) -> (a + "" + b).compareTo(b + "" + a)); // 将排序后的Integer[]转回int[] return Arrays.stream(arr).mapToInt(Integer::intValue).toArray(); } }
补充说明
如果只是测试固定数组{1,2,3,4,5},也可以直接初始化Integer[] arr = {1,2,3,4,5};跳过流转换步骤,但上面的代码适配传入的nums参数,通用性更强。
内容的提问来源于stack exchange,提问作者Mohammad Basheer
相关产品推荐
相关产品推荐

