Как сортировать массива

Сортирую строку. Для сортировки применяю метод: sorted = listValue.stream().sorted().collect(Collectors.toList());.При сортировке почему-то берёт во внимание только первые цифры. Если входной массив1 2 8 7 9, то отсортирует отлично, а если 1 8 9 81 17, то будет так: 1 17 8 81 9`. Почему так получается, как это исправить?


Ответы (1 шт):

Автор решения: Nowhere Man

Если данные в списке представляют собой числа в строковом представлении, следует использовать вариант Stream::sorted(Comparator<? super T> comparator) с кастомным компаратором (в данном случае Comparator::comparingInt(ToIntFunction<? super T> keyExtractor):

List<Object> sorted = listValue.stream()
        .sorted(Comparator.comparingInt(x -> Integer.parseInt(Objects.toString(x))))
        .collect(Collectors.toList());
→ Ссылка