【问题标题】:Sorting based on a criteria Java (Custom Sort)基于 Java 标准的排序(自定义排序)
【发布时间】: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


    【解决方案1】:

    例如,我们假设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());
    

    如果arrList<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()); 对您的代码稍作更改对我有用....谢谢:)
    • @PallaviReddyPalwai 顺便说一句,如果您使用的是Comparator.comparingDouble,则无需投射(double)Arrays.sort(arr, Comparator.comparingDouble((Integer x) -> x/(Math.pow(10, x.toString().length()-1))).reversed());
    【解决方案2】:

    或者,如果您不想修改现有数组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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2011-09-27
      相关资源
      最近更新 更多