Страницы

Поиск по вопросам

четверг, 16 мая 2019 г.

Сортировка потока в обратном направлении

На вход подается текстовая строка. Нужно вернуть слово с наибольшей сумой значений кодов символов. Сортировку нужно выполнить в обратном направлении. Использую метод reversed(), но тогда не могу использовать метод chars(), так как w типа Object. Как правильно осуществить сортировку в обратном порядке?
public static String high(String s) {
return Stream.of(s.split(" ")) .sorted(Comparator.comparingInt(w -> w.chars().sum()).reversed()) .toArray(String[]::new)[0];
}


Ответ

Попробуйте так:
public static String high(String s) {
return Stream.of(s.split(" ")) .sorted(Comparator.comparing(String::chars, Comparator.comparingInt(IntStream::sum)).reversed()) .toArray(String[]::new)[0];
}
Данный метод первым аргументом принимает key extractor, т.е. какие данные нам нужно вытащить для сортировки, а второй аргумент принимает то, КАК мы будем сортировать. Ну то есть все просто, вытащили IntStream чаров и отсортировали по их сумме

Комментариев нет:

Отправить комментарий