排序array.can有人解释下面的代码

时间:2017-02-02 09:46:27

标签: java sorting bigdecimal

String[] x = Arrays.copyOf(s, n);
Arrays.sort(x,Collections.reverseOrder(Comparator.comparing(BigDecimal::new)));        
s = x;

3 个答案:

答案 0 :(得分:1)

Java版本8获得了更强大的功能。 Java 7:

假设sString[]n是一个小于或等于s中元素数量的整数:

String[] x = Arrays.copyOf(s, n);

n的{​​{1}}元素复制到s

<小时/>         x

根据Arrays.sort(x,Collections.reverseOrder(Comparator.comparing(BigDecimal::new)));每个元素的x表示,按降序排序BigDecimal。请注意使用x和运算符BigDecimal::new(Java 8新增功能),它从::中选择BigDecimal构造函数

java.lang.String

设置s = x;以引用新排序的数组。

答案 1 :(得分:0)

String[] x = Arrays.copyOf(s, n); - 将s的n个元素复制到x。

BigDecinal::new有一个字符串构造函数,因此类似于string -> new BigDecinal(string)

下一步你有Comparator并声明了如何比较,下一步你宣布了必须在你的表中应用的顺序

如果你想了解步骤,那么好的选择是提取变量的步骤:

    String[] x = Arrays.copyOf(s, n);
    final Comparator<String> comparing = Comparator.comparing(string -> new BigDecimal(string));
    final Comparator<String> order = Collections.reverseOrder(comparing);
    Arrays.sort(x, order);
    s = x;

答案 2 :(得分:0)

正如here所述,Collections.reverseOrder(c)

  

返回一个比较器,它强制指定比较器的反向排序。

Comparator.comparing(BigDecimal::new)比较两个BigDecimal(x,y),如果-1则返回x < yx==y则返回0,x > y则返回1。

因此,Collections.reverseOrder(Comparator.comparing(BigDecimal::new))返回一个比较器,它返回数字自然排序的倒数。

因此,您的数组将按相反的顺序排序。