Найти сумму числел из строки с помощью Stream API
Необходимо реализовать метод , который должен возвращать сумму целых значений из списка строк.
myMethod(Arrays.asList("2 плюс 2","2019 год был самым лучшим"));
На выходе 2023 соответственно. Прошу помощи,все до чего додумался это преобразовать в стрим из чаров и работать с ним,но дальше не продвинулся
Делал примерно так:
return input.
stream()
.map(e -> e.toCharArray())
.flatMap(e -> CharBuffer.wrap(e).chars().mapToObj(ch -> (char)ch))
.filter(e -> Character.isDigit(e))
Ответы (1 шт):
Автор решения: kami
→ Ссылка
если считать, что все числа ограждены пробелами, то задача сводится к:
- получить массив "слов",
- отфильтровать не являющиеся числами
- сложить оставшиеся
то есть, например так:
private static boolean canConvertStrToInt(final String str){
try{
Integer.parseInt(str); // пробуем преобразовать
return true;
} catch (Exception e){ // неважно, почему не получилось
return false; // вернем "нельзя преобразовать"
}
}
public static int sumIntsInStrings(List<String> inputValues){
return inputValues.stream()
.flatMap(str-> Arrays.stream(str.split(" "))) // разбиваем на слова. Если нужны не только пробелы - regexp нужно поменять
.filter(Main::canConvertStrToInt) // убираем не числовые значения
.map(Integer::parseInt)// преобразуем в Stream<Integer>
.flatMapToInt(IntStream::of)// в IntStream
.sum(); // и суммируем.
}