2016-11-19 28 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

我可以在這裏運行它,也許你的輸入數組不是整數,但雙打或什麼? –