2017-01-27 1 views
2

Пусть Предположим, что мы имеем некоторый ArrayList со значениями:Как сортировать ArrayList целых чисел без независимо от положительных и отрицательных значений

List<Integer> list = new ArrayList<Integer>(40); 
list.add(5); 
list.add(-5); 
list.add(-1); 
list.add(10); 
list.add(-12); 

Естественная сортировка будет: [-12, -5, -1,5 , 10] with Collections.sort (list)

Но как я могу «игнорировать» (прошу прощения за определение) отрицательные и положительные значения, и я получаю следующий результат: [-1, -5,5, 10, -12]?

Ранее спасибо за свободное время для моего вопроса.

+5

Напишите ['Comparator'] (https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html), который использует [' Math.abs'] (https : //docs.oracle.com/javase/8/docs/api/java/lang/Math.html#abs-int-). – khelwood

+0

Вы проводили какие-либо исследования? –

+0

@KevinWallis, очевидно, он попробовал сортировать его через 'Collections.sort()'. – Andremoniy

ответ

13

Использование Math.abs() функции:

Collections.sort(list, new Comparator<Integer>() { 
     public int compare(Integer o1, Integer o2) { 
      return Integer.compare(Math.abs(o1), Math.abs(o2)); 
     } 
    }); 

Или использовать лямбда для Java-8:

Collections.sort(list,(o1, o2) -> Integer.compare(Math.abs(o1), Math.abs(o2))); 

Или еще более простой, есть готовый outofbox компаратор:

Collections.sort(list, Comparator.comparingInt(Math::abs)); 

И если мы говорим о java-8, по крайней мере, самый простой:

list.sort(Comparator.comparingInt(Math::abs)); 
+2

Спасибо за быстрый ответ. Я действительно застрял. Хорошего дня. –

Смежные вопросы