4

Поскольку Java 8, Integer класс имеет статический sum метод, который добавляет два целых числа:Есть ли аналог умножения Integer :: sum?

public static int sum(int a, int b) { 
    return a + b; 
} 

Я могу пройти этот метод для более высокого порядка функции через Integer::sum, которые я нахожу более удобным для чтения, чем (a, b) -> a + b.

Есть ли аналогичный статический метод для умножения, поэтому мне не нужно писать (a, b) -> a * b? Я не смог найти его в классе Integer.

ответ

5

Math::multiplyExact

static int multiplyExact(int x, int y)

Возвращает произведение аргументов, бросая исключение, если результат перетекает в Int.

+1

За исключением того, что это не то же самое, что '(a, b) -> a * b' из-за его поведения при переполнении. –

+1

Правда. Вопрос не был действительно ясным, как переполнение должно быть обработано, хотя –

+2

Я не могу быть уверенным, что 'Math :: multiplyExact' не будет достаточным для OP на практике, но представляется разумным предположить, что он хочет метод, который имеет та же семантика во всех отношениях, что и лямбда, которую он хочет заменить. Замена лямбды, которая никогда не будет бросаться с помощью ссылки на метод, которая может бросаться, кажется мне немного опасной. –

5

Вы можете сделать это самостоятельно:

public static int mult(int a, int b) { 
    return a * b; 
} 

Это может показаться очевидным в ретроспективе, но за пределами того, что я не верю, что есть на самом деле JDK-включен метод, который умножает для вас, кроме для Math#multiplyExact (Math::multiplyExact), хотя это может быть больше, чем вам нужно.