Имеется массив. Требуется осортировать его так, чтобы первые в массиве встали нули, после отрицательные, а самые последние оказались положительные цифры. Все это надо сделать в рамках одного массива
Ответ
Можно использовать такой вариант:
int a[] = {-8, 7, 0, 0, 6, 4, 17, -37, -178, -1, 0, 77};
a = IntStream.of(a).boxed().sorted(
(x, y) -> x == 0 ? Integer.compare(x, Math.abs(y)) :
y == 0 ? Integer.compare(Math.abs(x), y) :
Integer.compare(x, y)
).mapToInt(Integer::intValue).toArray();
В случае, если один из аргументов равен нулю - сравнивать его с абсолютным значением другого аргумента. Таким образом нули будут в самом начале, а остальные значения будут отсортированы как обычно.
В случае, если не нужно сортировать числа в каждой из групп, можно воспользоваться более простым вариантом:
a = IntStream.of(a).boxed()
.sorted(Comparator.comparing(i -> i == 0 ? -1 : i > 0 ? 1 : 0))
.mapToInt(Integer::intValue).toArray();
Комментариев нет:
Отправить комментарий