【发布时间】:2019-05-07 14:22:14
【问题描述】:
如何根据条件对数组进行排序?
在 Python 中我可以做这样的事情
arr.sort(key=lambda x: x/(10**len(str(x))-1),reverse=True)
例子:
arr=[3,30,34,5,9]
排序后
arr=[9,5,34,3,30]
如何使用 Java 实现相同的功能?
【问题讨论】:
标签: java python arrays sorting comparator
如何根据条件对数组进行排序?
在 Python 中我可以做这样的事情
arr.sort(key=lambda x: x/(10**len(str(x))-1),reverse=True)
例子:
arr=[3,30,34,5,9]
排序后
arr=[9,5,34,3,30]
如何使用 Java 实现相同的功能?
【问题讨论】:
标签: java python arrays sorting comparator
例如,我们假设arr被定义为:
Integer[] arr = new Integer[]{1,2,3,4,5}
您可以通过以下方式实现 Java 等价物:
Arrays.sort(arr, Comparator.comparingInt((Integer x) -> x/((int)Math.pow(10, x.toString().length()-1))).reversed());
如果arr 是List<Integer>,那么你可以这样做:
arr.sort(Comparator.comparingInt((Integer x) -> x/((int)Math.pow(10, x.toString().length()-1))).reversed());
【讨论】:
Arrays.sort(nums, Comparator.comparingDouble((Integer x) -> x/((double)Math.pow(10, x.toString().length())-1)).reversed()); 对您的代码稍作更改对我有用....谢谢:)
Comparator.comparingDouble,则无需投射(double),Arrays.sort(arr, Comparator.comparingDouble((Integer x) -> x/(Math.pow(10, x.toString().length()-1))).reversed());
或者,如果您不想修改现有数组arr,您可以使用:
int[] sortedArr = Arrays.stream(arr)
.boxed()
.sorted(Comparator.comparingDouble(
(Integer x) -> x / (Math.pow(10, x.toString().length() - 1))).reversed())
.mapToInt(i -> i)
.toArray();
【讨论】: