Ошибка типа: объект «Библиотека» не может быть вызван

Почему они используют .chars ()?

Поскольку вам нужно получить доступ к каждому символу, если вы хотите вручную преобразовать String в int. Каждый символ содержит одну цифру номера, поэтому вам нужно получить доступ к каждому символу. String.chars() возвращает поток символов в String.

В третьей и последней строке я даже не понимаю синтаксис.

Давайте сломаем его, затем:

Stream.reduce() уменьшает значения внутри потока до одного единственного значения, используя 0 в качестве значения identity и лямбда-выражения (runningSum,c) -> runningSum * 10 + c -'0' в качестве аккумулятора .

Лямбда-выражение (runningSum,c) -> runningSum * 10 + c -'0' преобразуется в экземпляр BinaryOperator компилятором Java. Этот конкретный экземпляр принимает два аргумента int и возвращает один результат int. Вы можете себе представить, что это выглядит примерно так:

class CompilerGeneratedBinaryOperator implements BinaryOperator {
    public int apply(int runningSum, int c) {
        return runningSum * 10 + c -'0';
    }
}

Метод уменьшить затем вызовет этот метод в цикле по всем символам в String, всегда используя последний результат как следующий параметр runningSum (и идентификатор 0 в самом первом вызове).

Теперь давайте посмотрим на инструкцию внутри лямбда: runningSum * 10 + c -'0'.

Что здесь происходит, он использует код ASCII для каждого символа. Он в основном предполагает, что он имеет строку, которая представляет действительное целое число, то есть все символы находятся в пределах от '0' до '9'. Если вы посмотрите таблицу ASCII, вы заметите, что целочисленное представление числовых символов - 48 - 57. Таким образом, '0' равен 48, что означает, что, когда символ c равен '0', это значение равно 48, а c - '0' будет 48 - 48, что 0. Если c - '1', '1' - '0' будет 1 и так далее. В основном c - '0' дает целочисленное значение, соответствующее значению, представленному символом.

Остальное просто. Он умножит каждый последний результат на 10 и добавит текущую цифру, как указано в . Ответ Майкла работает следующим образом:

Step 1. 0
Step 2. (0 * 10) + 1 == 1
Step 3. (1 * 10) + 2 == 12
Step 4. (12 * 10) + 3 == 123

0
задан Amal Raj 19 January 2019 в 10:33
поделиться