2016-11-19 58 views

回答

4

与Java 8中,您可以使用Lambda和Math.abs这样的:

Integer[] array = {9,-2,10,3,-5,34,-22,7}; 
Arrays.sort(array, (a,b) -> (Integer.compare(Math.abs(a), Math.abs(b)))); 
Stream.of(array).forEach(a -> System.out.println(a)); 

感谢4castle的建议。或者使用比较

Arrays.sort(array, Comparator.comparingInt(Math::abs)); 
+2

而不是一个lambda,你可以使用'Comparator.comparingInt(Math :: abs)' – 4castle

+0

@ShivaNandam它用来将数组转换为流,因此您可以利用类似于列表的流功能。 –

+1

[适用于我](https://ideone.com/ZRoeeo)。而不是使用流,最后一行可能只是for..each循环,或者'Arrays.asList(array).forEach(System.out :: println);' – 4castle

-1

你可以得到数字的绝对值,那么你可以做的排序

在Java

double f = Math.abs(-2);给你值2然后你就可以进行排序。

+1

好的谢谢..但做Math.abs(-2)后,我不能得到相同的输出 –

1

使用sort有一个额外的比较:

Arrays.sort(a, new AbsComparator()); 

比较本身看起来是这样的:

class AbsComparator extends Comparator<Integer>() { 
    @Override 
    public int compare(Integer i1, Integer i2) { 
     return Math.abs(i1) < Math.abs(i2); 
    } 
} 
2

一个简洁的方式来做到这一点是

Arrays.sort(array, Comparator.comparingInt(Math::abs)); 

例子。

输入:[9,-2,10,3,-5,34,-22,7]

输出:[-2,3,-5,7,9,10,-22 ,34]

Integer[] array = {9,-2,10,3,-5,34,-22,7}; 

    Arrays.sort(array, Comparator.comparingInt(Math::abs)); 

    System.out.println(Arrays.toString(array)); 
+1

好的谢谢..但我得到不兼容的类型: –

+0

我可以在这里运行它,也许你的输入数组不是整数,但双打或什么? –